Go 如何注册systemd服务生命周期事件?

Go 如何注册systemd服务生命周期事件?,go,dbus,systemd,Go,Dbus,Systemd,我想了解服务单位的所有状态变化。我知道有DBUSAPI为我提供UnitNew和UnitRemoved的信号,但我仍然不清楚其语义。而且信号也不能提供我需要的信息 我正在使用go并尝试了coreos的。它们提供了一种“订阅”的方式,但实际上它轮询系统中所有可用的单元信息。我不想每隔几毫秒就这样做,只是为了得到有关状态更改的信息 我还尝试了默认的org.freedesktop.DBus.Properties,但无法使其正常工作 如果可以,请提供帮助,我没有主意。包含服务单元启动或停止信息的是: 系

我想了解服务单位的所有状态变化。我知道有DBUSAPI为我提供UnitNew和UnitRemoved的信号,但我仍然不清楚其语义。而且信号也不能提供我需要的信息

我正在使用go并尝试了coreos的。它们提供了一种“订阅”的方式,但实际上它轮询系统中所有可用的单元信息。我不想每隔几毫秒就这样做,只是为了得到有关状态更改的信息

我还尝试了默认的org.freedesktop.DBus.Properties,但无法使其正常工作

如果可以,请提供帮助,我没有主意。

包含服务单元启动或停止信息的是:

  • 系统杂志。您可以通过执行或通过网络将其转发到您的程序或监视磁盘上文件的更改来侦听它。例如:执行
    journalctl--follow-o json pretty\u PID=1
    (您可以添加各种过滤器,如
    UNIT=gdm.service
    ,以仅获取一个服务的过滤器),然后根据语法解析
    stdout
    ,以获取systemd的日志消息。使用
    消息\u ID
    匹配事件的含义,观察未知消息,以了解现有消息何时被新消息替换。虽然这可能足够可靠,但日志消息主要不是作为API使用的。因此,我建议使用以下选项

  • 当它们在何时启动服务时生成

  • 通过它们的依赖关系(如
    想要=