Я все еще сталкиваюсь с 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
Свяжите файл модуля, который отсутствует в путях поиска файла модуля, в путь поиска файла модуля. Это требует абсолютного пути к файлу модуля. Эффект этого можно отменить с отключением. Результатом этой команды является то, что файл модуля доступен для запуска и других команд, хотя он не установлен непосредственно в пути поиска модуля.
systemctl enable
это тоже подойдетsystemctl link
, поэтому не нужно вводить 2 команды ;-)При включении службы по другому пути, чем пути по умолчанию, вы должны использовать полный путь. Включить также создаст ссылку для вас:
После включения вы можете запустить / остановить / статус с именем службы
Несколько предостережений здесь:
источник