监控“失败”服务

时间:2009-10-04 17:33:50

标签: python scripting

我正在开发一个监视服务失败的脚本,并根据是否存在故障启动另一个不同的操作。

我需要一个python脚本来监视python程序“monitor-services”的输出,并解析输出搜索中出现的单词“failure”。如果存在,脚本应返回true值,如果没有出现“failure”,则运行最多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

任何帮助都将不胜感激。

[edit]在触发脚本的操作30秒左右可能会发生故障,因此脚本需要在30秒后终止。 [/编辑]

1 个答案:

答案 0 :(得分: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,根据shell约定(即0表示成功,非零表示失败)。