Увімкнення "пов'язаних" одиничних файлів у Systemd


10

Я досі стикаюся з systemd і натрапив на щось. Це не стільки проблема, але я хотів би дізнатися більше про те, як це відбувається. Я не могла знайти посилання на це в іншому місці.

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

У документації я побачив, що ви можете "зв’язати" файли одиниць так:

systemctl link /path/to/servicename.service

Це створить посилання на вищезгадане в /etc/systemd/system. Тепер ви можете запустити / зупинити цю послугу. На перший погляд, це здавалося нам хорошим способом управління нашими послугами.

Однак спроба ввімкнути такий «зв’язаний» одиничний файл призводить до невдачі:

root@test1:/etc/systemd/system# systemctl link /root/myservice.service 
Created symlink from /etc/systemd/system/myservice.service to /root/myservice.service.

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/root/myservice.service; linked; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Failed to execute operation: No such file or directory

Використовуючи той самий файл одиниці, але скопійований у, /etc/systemd/systemа не зв'язаний, ви отримуєте:

root@test1:/etc/systemd/system# cp -p /root/myservice.service .

root@test1:/etc/systemd/system# systemctl daemon-reload 

root@test1:/etc/systemd/system# systemctl status myservice.service 
 * myservice.service - My Test Service
     Loaded: loaded (/etc/systemd/system/myservice.service; disabled; vendor preset: enabled)

root@test1:/etc/systemd/system# systemctl enable myservice.service
Created symlink from /etc/systemd/system/multi-user.target.wants/myservice.service to /etc/systemd/system/myservice.service.

З цього виходить, що неможливо увімкнути виклик пов'язаних файлів у модулі при запуску системи.

Якщо це так, у чому сенс функціонування "посилання"? У документах написано:

посилання FILENAME

Зв’яжіть файл одиниці, який не знаходиться у шляхах пошуку файлу одиниці, у шлях пошуку файлу файлу. Для цього потрібен абсолютний шлях до одиничного файлу. Ефект цього можна відмінити відключенням. Ефект цієї команди полягає в тому, що файл одиниці доступний для запуску та інших команд, хоча він не встановлений безпосередньо в шляху пошуку одиниць.

Відповіді:


15

Сторінка людини вводить в оману.

systemctl link /root/myservice.service

systemctl enable /root/myservice.service

Перший дозволяє вам це зробити systemctl start myservice. Другий дозволяє myserviceзапускати автоматично (що, як вказував @Julien, автоматично додає link).

Я думаю ... Я весь цей день намагаюся обернути голову.


1
зауважте, що systemctl enableце теж зробить systemctl link, тому не потрібно набирати 2 команди ;-)
Жульєн

@Julien О, де ми з вами, коли я писав це минулого року :-) Я думаю, що нарешті зрозумів, що минулого місяця!
Ауспекс

Я думаю, що про це знає дуже мало людей. Дуже дякую!
Кайл

10

Під час включення послуги з іншого шляху, ніж шляху за замовчуванням, ви повинні використовувати повний шлях. Увімкнути також створить посилання для вас:

systemctl enable /root/myservice.service

Після ввімкнення можна запустити / зупинити / статус з назвою послуги

systemctl start myservice

Кілька застережень тут:

  • ви не можете ввімкнути службовий файл, який сам по собі вже є посиланням
  • переконайтеся, що шлях знаходиться на тому ж змонтованому диску. Якщо цього немає, systemd не зможе завантажити файли сервісного блоку під час завантаження, оскільки диск ще не змонтований і файли не знайдеться. (див. файли, пов'язані з Systemd, на встановленому диску не вдалося завантажити )
  • через помилку в systemd ви не можете ввімкнути екземпляри з файлу одиниці, який знаходиться у нестандартному шляху (див. https://github.com/systemd/systemd/isissue/661 )
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.