следить за сервисом на «провал» - PullRequest
0 голосов
/ 04 октября 2009

Я разрабатываю сценарий, который отслеживает службу на предмет сбоя и запускает другое действие в зависимости от того, присутствует ли сбой или нет.

Мне требуется сценарий python для отслеживания выходных данных программы python "monitor-services" и анализа результатов поиска вхождения слова "fail". Если он присутствует, сценарий должен возвращаться с истинным значением и работать в течение максимум 30 секунд, возвращая ложное значение, если не происходит «сбоя».

Пример вывода, возвращенный из "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 голос
/ 04 октября 2009
#!/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 - успех, ненулевое - сбой).

...