我运行以下命令:
systemctl status tomcat10.service
#and get the following warning:
Warning: The unit file, source configuration file or drop-ins of tomcat10.service changed on disk. Run 'systemctl daemon-reload' to reload units.
如果我查看单元文件
ls -l /usr/lib/systemd/system/tomcat10.service
-rw-r--r-- 1 root root 1161 Jul 2 12:36 /usr/lib/systemd/system/tomcat10.service
该文件已被修改或至少被篡改。
然而,即使我使用这样的装置比较当前运行的配置:
systemctl cat tomcat10.service | diff /usr/lib/systemd/system/tomcat10.service -
# Warning: tomcat10.service changed on disk, the version systemd has loaded is
outdated.
# This output shows the current version of the unit's original fragment and drop-in files.
# If fragments or drop-ins were added or removed, they are not properly reflected in this output.
# Run 'systemctl daemon-reload' to reload units.
0a1
> # /usr/lib/systemd/system/tomcat10.service
但在这种情况下,我根本看不到任何不同,而且消息让我感到困惑,我真的是在将正在运行的 congig 与当前配置进行比较吗?如果我什么都没有改变,那么为什么 systemd 要求我进行守护进程重新加载?
所以我的问题是如何可靠地将 systemctl unit 运行配置与当前启动配置进行比较?
更广泛地说,如何知道在执行时或键入时/之前发生了什么变化或即将发生什么变化systemctl daemon-reload
。
您的怀疑是正确的:
systemctl cat
始终显示相关单元文件的内容,因为它们当前在磁盘上,而不是它们当前在 systemd 的系统视图中。您可以使用 查看后者systemctl show
,但这将为您提供单元的整体合并属性,而不会指示值来自何处(默认值、系统单元、覆盖等)。systemctl
警告您单元文件已发生更改,因为它们的上次修改时间比加载时的修改时间新;这就是 systemd 所比较的全部内容。我不知道有什么简单的方法可以确定下一个 会发生什么变化
daemon-reload
。您可以通过将 的输出与所有相应单元文件的当前内容进行比较来找出答案systemctl show
,但这最终可能会变得复杂。