Нужно ли перезагружать файлы модулей systemd после изменения?

138

Допустим, я пишу mine.serviceфайл. Тогда я использую systemctl enable mine.service.

Если я позже решу отредактировать mine.service, должен ли я сказать, systemdчто это mine.serviceбыло изменено? Если да, то как мне это сделать?

425nesp
источник

Ответы:

169

После того, как вы внесете изменения в файл модуля, вы должны запустить его systemctl daemon-reload, как описано здесь .

daemon-reload
Перезагрузить конфигурацию системного менеджера. Это перезапустит все генераторы (см. Systemd.generator (7) ), перезагрузит все файлы модулей и заново создаст все дерево зависимостей. Пока демон перезагружается, все сокеты, которые systemd прослушивает от имени пользовательской конфигурации, будут оставаться доступными.

Затем вы можете перезапустить (или перезагрузить) свой сервис по своему желанию с

systemctl restart your-service-name

(daemon-reload не будет перезагружать / перезапускать сами сервисы, просто уведомляет systemd о новой конфигурации)

GregL
источник
2
Я обнаружил, что мне также нужно запустить a, systemctl restartчтобы фактически перезапустить саму службу ...
hwjp
3
На всякий случай, daemon-reloadне универсальный, надо бежать systemctl --user daemon-reloadза пользовательскими сервисами.
Олег Еремеев
Как примечание, он также «удаляет предыдущую конфигурацию, созданную генераторами», прежде чем перезапустить их: freedesktop.org/software/systemd/man/systemd.generator.html
rogerdpack
8

В дополнение к ответу выше: Если вы что-то изменили в [Install]директиве, вам может потребоваться запустить ее sudo systemctl reenable YOURUNITFILE, чтобы воссоздать символические ссылки в каталогах .target.

HomelessGamer
источник
Это помогло мне! Не понял, почему systemctl не перезагружал служебный файл.
антагонестам