Чи можу я використовувати символічне посилання як послугу systemd?


14

Наприклад, у мене є служба, названа mysshd.serviceпід /usr/lib/systemd/system/каталогом. Чи можу я створити символічне посилання, наприклад:

ln -s /usr/lib/systemd/system/mysshd.service /usr/lib/systemd/system/fool.service

так що будь-яка операція, яку я роблю з дурнем.сервіс, відобразиться на mysshd.service( systemctl enable/disable start/stop fool.servce)?

Моє призначення полягає в тому, щоб перезаписати нативну службу sshd символічним посиланням моєї власної служби sshd.


1
Чому б не додати та ввімкнути свою послугу та відключити нативну службу sshd?
Ламберт

Я хочу, щоб моє програмне забезпечення було сумісним з попередньою версією, яка використовувала символічне посилання /etc/init.d/ssh -> /etc/init.d/myssh.
нік

Я все ще не точно розумію, що ви маєте на увазі, але згідно з вашим рядком <цитувати>, так що будь-яка операція, яку я роблю з дурнем.сервіс, буде відображена на mysshd.service (systemctl включити / відключити запуск / зупинку дурня. Сервце)? </ Цитата > Ви можете ознайомитись із системними залежностями (див. wiki.archlinux.org/index.php/systemd#Handling_dependitions ) для запуску / включення служби після sshd.
Ламберт

@nick ласкаво просимо до обміну стеками! на стек-біржі прийнято показувати кудо для відповідей шляхом голосування. це можна зробити, натиснувши стрілку вгору зліва від відповіді. якщо моя відповідь вирішила вашу проблему, ви можете також розглянути питання про натискання прапорця, щоб позначити його як прийняте. Спасибі!
strugee

Відповіді:


9

Наскільки я знаю, systemd з цим не справиться особливо добре. Як я це розумію, ти хочеш змінити поведінку sshd.service, правда?

На щастя для вас, systemd призначений для подібних речей. Просто введіть визначення служби /etc/systemd/system/ssh.service, виконайте systemctl daemon-reloadдля перезавантаження файлів одиниць, і systemd автоматично використовуватиме цю конфігурацію замість системи ssh.service.

Хочете мати systemctl enable mysshd.serviceроботу теж? Без проблем. У [Install]розділ вашого одиничного файлу додайте рядок із написанням Alias=mysshd.service. Потім виконайте, systemctl reenable ssh.serviceщоб системно виправити одиницю символьних посилань, і ви золото.

Тепер ви не дали детальної інформації про те, що mysshd.serviceпотрібно робити. Якщо він зовсім інший від нормального ssh.service, здорово! Скористайтеся вищевказаним методом. Однак якщо ви просто хочете змінити одну дрібницю, то ви використовуєте неправильний підхід. systemd дозволяє створити "фрагменти" файлів одиниць, які будуть застосовані поверх звичайних файлів одиниці. Це дозволяє додавати або змінювати окремі директиви, дозволяючи решті файлу пристрою отримувати оновлення від менеджера пакунків. Для цього просто створіть /etc/systemd/system/ssh.d/my-custom-config.conf(ви можете змінити my-custom-config.confбудь-що, що хочете, а також можете мати кілька файлів перезапису). У цьому файлі розмістіть усі директиви, які ви хочете змінити або додати до звичайних ssh.service. Ви навіть можете додавати Alias=директиви, щоб це systemctl start mysshd.serviceпрацювало! Просто не забудьте виконатиsystemctl daemon-reloadпісля того, як ви зробили (і, якщо ви використовували Alias=, systemctl reenable ssh.service).

Як убік, ніколи і ніколи не змінюйте файли системних одиниць у /usr/lib/systemd. Колись! Стандарт ієрархії файлової системи вимагає, щоб /usrце трактувалося лише для читання. На практиці це означає, що менеджер пакунків обробляє /usr(крім /usr/local), і ви не торкаєтесь того, що обробляє менеджер пакунків - тим більше, що все, що ви зміните, ймовірно, зрештою буде перезаписано. Натомість покладіть свої речі десь на зразок /etc.


1
Щоб трохи уточнити: якщо ви хочете переоформити foo.service, запустіть sudo systemctl edit foo.service, і це збереже все, що ви ввели /etc/systemd/system/foo.service.d/override.conf.
Rockallite

Крім того, Alias=директива НЕ працює у перезаписуванні файлів. Дивіться github.com/systemd/systemd/isissue/1090
Rockallite

@Rockallite не знав про systemctl editте, коли я писав цю відповідь. не соромтесь відредагувати мою відповідь, щоб відобразити Alias=помилку (поставте «Добре з відповідачем» або щось у редагуванні повідомлення). хороший улов.
удари

5

Використовувати linkз повним шляхом:

systemctl link /home/nick/myservice.service

Зауважте, що ви не можете зв’язати службовий файл, який сам по собі вже є посиланням.


Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.