如何查找磁盘上发生变化的systemd服务?

如何查找磁盘上发生变化的systemd服务?

假设我有一个名为 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。之后,警告消失了,似乎无法检测正在运行的服务是否与磁盘上的配置匹配。

当然我也可以重新启动一切,但这会导致不必要的停机。

那么最好的方法是什么?

相关内容