$ busctl introspect org.freedesktop.systemd1 \
/org/freedesktop/systemd1 \
org.freedesktop.systemd1.Manager \
| grep signal
.JobNew signal uos - -
.JobRemoved signal uoss - -
.Reloading signal b - -
.StartupFinished signal tttttt - -
.UnitFilesChanged signal - - -
.UnitNew signal so - -
.UnitRemoved signal so - -
没有任何服务。systemd 管理器的 dbus 接口不提供那种类型的全局通知。如果您正在寻找将在全球范围内触发的信号,则经理的信号有点有限,可能是出于性能原因:
此处提供完整界面:
https://www.freedesktop.org/software/systemd/man/org.freedesktop.systemd1.html
但是,如果您想知道某个特定服务是否已更改状态,您可以订阅该特定服务。示例:sshd.service:
.PropertiesChanged
每当属性更改时都会发出信号。您可能感兴趣的属性是
.ActiveState
或在界面.SubState
上org.freedesktop.systemd1.Unit
。那么您将如何订阅并获取这些数据呢?我不确定如何编写脚本,但我会使用 sd-bus API (
#include <systemd/sd-bus.h>
) 在 C 中编写一些东西。这需要以下步骤:这里有一个相关的答案: https ://stackoverflow.com/questions/61940461/how-to-get-the-state-of-a-service-with-sd-bus/62038047#62038047
一个简单的可能性是只尾随 journald 输出,
journalctl -f
. 有各种输出格式选项,包括 json 以便于解析。