Чтобы перезапустить демон, запустите
systemctl daemon-reexec
Это задокументировано на systemctl
странице руководства :
Повторно запустите системный менеджер. Это позволит сериализовать состояние диспетчера, повторно выполнить процесс и снова десериализовать состояние. Эта команда мало полезна, за исключением отладки и обновления пакетов. Иногда это может быть полезно как тяжеловес daemon-reload
. Во время повторного выполнения демона все сокеты, прослушиваемые systemd от имени пользовательской конфигурации, будут оставаться доступными.
К сожалению, needs-restarting
не могу определить, что на systemd
самом деле перезапустил. systemd
execs
сам перезапустить, что не сбрасывает время запуска процесса; но needs-restarting
сравнивает время модификации исполняемого файла со временем запуска процесса, чтобы определить, должен ли процесс быть перезапущен (среди прочего), и в результате он всегда считает, что systemd
должен быть перезапущен ... Чтобы определить, systemd
действительно ли нужно перезапускать, вы можете проверить вывод lsof -p1 | grep deleted
: systemd
использует библиотеку, libsystemd-shared
которая поставляется в том же пакете и, таким образом, обновляется вместе с демоном, поэтому при systemd
необходимости перезапуска вы увидите ее, используя удаленную версию библиотеки. Если lsof
показывает, что удаленных файлов systemd
нет, перезапускать не нужно. (БлагодаряДжефф Шаллер за подсказку!)
daemon-reexec
должен работать даже сsystemd
pid 1.