我正在尝试yum update
在 RHEL 7.4 上重启服务。我可以使用 systemctl 重新启动每个服务,但needs-restarting
fromyum 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
命令再次开始工作。