Answers:
要重新启动守护程序,请运行
systemctl daemon-reexec
这是记录在该systemctl
手册页:
重新执行systemd管理器。这将序列化管理器状态,重新执行该过程,然后再次反序列化该状态。除了调试和软件包升级以外,此命令几乎没有用。有时,作为重量级人物可能会有所帮助
daemon-reload
。重新执行守护程序时,代表用户配置侦听的所有套接字systemd都将保持可访问状态。
不幸的是needs-restarting
无法确定是否systemd
已真正重启。systemd
execs
自己重新启动,这不会重置进程的开始时间;但是needs-restarting
将可执行文件的修改时间与进程的启动时间进行比较,以确定是否需要重启进程(以及其他原因),因此,它始终认为systemd
需要重启...要确定是否systemd
真的需要重启,您可以检查的输出lsof -p1 | grep deleted
:systemd
使用一个库,libsystemd-shared
该库与同一软件包一起提供,并与守护程序一起升级,因此,如果systemd
需要重新启动,您会使用库的已删除版本看到它。如果未lsof
显示删除的文件,systemd
则无需重新启动。(谢谢Jeff Schaller的提示!)
systemd
在Debian及其衍生产品上进行升级时都会使用它,因此它已经过了充分的测试。它也相当简单明了(请查找do_reexecute
)。
lsof -p1 | grep deleted
将生成以下输出lsof: WARNING: can't stat() fuse.gvfsd-fuse file system /run/user/1000/gvfs Output information may be incomplete
。在阅读(unix.stackexchange.com/questions/171519/…)时,即使root用户也无法访问它。替代方案是lsof -p1 | grep deleted
什么?
daemon-reexec
应该工作,即使systemd
是PID 1