【发布时间】:2018-01-31 06:15:59
【问题描述】:
如果 systemd 服务单元处于故障状态,systemctl status 会显示这一事实:
# systemctl status myservice
● myservice.service - Important Crash Prone service (myservice)
Loaded: loaded (/etc/systemd/system/myservice.service; enabled; vendor preset: disabled)
Active: failed (Result: start-limit) since Tue 2017-08-22 20:04:13 UTC; 3s ago
Process: 31108 ExecStart=/bin/myservice (code=dumped, signal=ABRT)
Main PID: 31108 (code=dumped, signal=ABRT)
我想让 Python 程序在不分叉 systemctl 并尝试解析输出的情况下获取“结果:开始限制”字段。其他字段(例如 Loaded、Active)可从 Python dbus 库中获得。
例如,以下代码获取ActiveState 属性,该属性由systemctl 在“Active:”之后显示(上面输出中的单词“failed”)。
from dbus import Interface, SystemBus, SessionBus
bus = SystemBus()
systemd = bus.get_object('org.freedesktop.systemd1',
'/org/freedesktop/systemd1')
manager = Interface(systemd, dbus_interface='org.freedesktop.systemd1.Manager')
myservice_unit = manager.LoadUnit('myservice.service')
myservice_proxy = bus.get_object('org.freedesktop.systemd1', str(myservice_unit))
myservice = Interface(myservice_proxy,
dbus_interface='org.freedesktop.systemd1.Unit')
prop = 'ActiveState'
value = myservice_proxy.Get('org.freedesktop.systemd1.Unit',
prop,
dbus_interface='org.freedesktop.DBus.Properties')
print("{} is: {}".format(prop, value))
看起来“结果”值不是一个属性,就像其他大部分输出一样。
【问题讨论】: