监控服务“故障”
我正在开发一个脚本,用来监控某个服务是否出现故障,并根据故障的情况执行不同的操作。
我需要一个Python脚本来监控另一个Python程序“monitor-services”的输出,并从中查找“failure”这个词。如果找到了,就返回一个真值(true),如果30秒内没有找到,就返回假值(false)。
从“monitor-services”返回的示例输出是:
{Device} [/device/xxx] Networks = dbus.Array([dbus.ObjectPath('/device/xxx/xxx'), dbus.ObjectPath('/device/00242b2e41b6/hidden')], signature=dbus.Signature('o'), variant_level=1) {Service} [/profile/default/wifi_xxx_managed_wep] State = association {Profile} [/profile/default] Services = dbus.Array([dbus.ObjectPath('/profile/default/wifi_xxx_managed_wep'), dbus.ObjectPath('/profile/default/wifi_xxx_managed_rsn')], signature=dbus.Signature('o'), variant_level=1) {Manager} [/] Services = dbus.Array([dbus.ObjectPath('/profile/default/wifi_xxx_managed_wep'), dbus.ObjectPath('/profile/default/wifi_xxx_managed_rsn')], signature=dbus.Signature('o'), variant_level=1) {Service} [/profile/default/wifi_xxx_managed_wep] **failure** {Service} [/profile/default/wifi_xxx_managed_wep] State = idle
任何帮助都将非常感谢。
[编辑] 故障很可能在触发脚本后的30秒内发生,因此脚本需要在30秒后终止。[/编辑]
1 个回答
1
#!/usr/bin/python
from subprocess import Popen, PIPE
import sys
data = Popen(["monitor-services"], stdout=PIPE).communicate()[0]
sys.exit("failure" in data)
这个代码实现了你想要的所有功能,除了那个30秒的等待(我也不太明白为什么要等这么久)。注意,它会根据约定返回0表示没有错误,返回1表示找到了错误(也就是说,0代表成功,非0代表失败)。