假设我有一个名为 example.service 的 systemd 服务。当我修改该文件然后运行时systemctl status example.service
,我收到以下警告:
警告:磁盘上的单元文件、源配置文件或 example.service 的 drop-ins 已更改。运行“systemctl daemon-reload”来重新加载单元。
据我所知,这systemctl daemon-reload
将使 systemd 意识到更改,并且systemctl restart example.service
将停止服务并使用新配置启动它。
如何获取磁盘上已更改且需要重新启动的服务列表?
据我了解,没有systemctl list-units --state changed-on-disk
。我的下一个最好的想法是一个像这样的笨重的脚本:
systemctl list-units --type service --no-legend | awk '{ print $1 }' | while read -r service; do
if systemctl status "$service" -n 0 | grep 'changed on disk' -q; then
echo "$service
fi
done
然而,这只在有人运行之前有效systemctl daeomon-reload
。之后,警告消失了,似乎无法检测正在运行的服务是否与磁盘上的配置匹配。
当然我也可以重新启动一切,但这会导致不必要的停机。
那么最好的方法是什么?