我可以在不重新启动的情况下重新启动 systemd 吗?

我可以在不重新启动的情况下重新启动 systemd 吗?

我正在尝试yum update在 RHEL 7.4 上重启服务。我可以使用 systemctl 重新启动每个服务,但needs-restartingfromyum utils告诉我我还应该重新启动 systemd 本身:

# needs-restarting
1 : /usr/lib/systemd/systemd --system --deserialize 21

我可以systemd在不重新启动服务器的情况下重新启动吗?如何?

我发现了一些提及systemctl daemon-reload,但这并没有使它从需要重新启动列表中消失。

答案1

要重新启动守护程序,请运行

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不需要重新启动。 (谢谢杰夫·夏勒以获得提示!)

答案2

就我而言,我刚刚升级systemd,任何systemctl命令都失败了:

# systemctl daemon-reexec
Failed to reload daemon: Access denied
# systemctl status
Failed to read server status: Access denied

然而,根据联机帮助页,您可以通过发送到以 PID 1 运行的守护进程来init执行相同的操作,这有效:SIGTERM

kill -TERM 1

这将重新加载守护进程,之后所有systemctl命令再次开始工作。

相关内容