如果systemd服务单元处于故障状态,则systemctl状态显示以下事实:
# 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程序获得“Result:start-limit”字段而不会分支systemctl
并尝试解析输出。其他字段(例如Loaded,Active)可从Python dbus库获得。
例如,以下代码获取ActiveState
属性,systemctl
在“Active:”之后显示(上面输出中的“失败”一词)。
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))
看来“结果”值在某种意义上不是属性,而是其他输出的大部分都是。
答案 0 :(得分:1)
如果您查看https://www.freedesktop.org/wiki/Software/systemd/dbus/处的文档,则说明df.columns = df.columns.str.strip()
属于服务单位对象(Result
)。
所以,我把它添加到你的代码中:
org.freedesktop.systemd1.Service
现在它工作得非常好!