监控服务“故障”

0 投票
1 回答
685 浏览
提问于 2025-04-15 14:47

我正在开发一个脚本,用来监控某个服务是否出现故障,并根据故障的情况执行不同的操作。

我需要一个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代表失败)。

撰写回答