2012-06-17 6 views
2

Мне нужно написать сторожевой таймер на Ubuntu LTS для сторонней сетевой программы передачи файлов Java, которая умирает каждые 40-50 минут непрерывной передачи сети @ 4 МБ/с.Написание сторожевого пса в Python

Я не могу изменить эту программу Java, но она появляется с помощью выскочки.

Мой текущий сторожевого занят ожидания:

while monitoring_enabled: 
    begin_time = now() 
    # query ps and /proc to see if it's there 
    end_time = now() 
    diff_time = end_time - begin_time 
    if not diff_time > sleep_time: 
     sleep(sleep_time - diff_time) 

Так, «занят ожидание плохо», и это съедает ~ 10% CPU, мне было интересно, если есть лучший способ решения этого:

  1. Имейте уведомление/обработку событий вместо опроса. Обратите внимание, что я не имею в виду, что любое уведомление/событие вызывается, когда процесс завершается, но я прошу, если операционная система может определить, что программа Java умерла

  2. Изменить выскочку скрипта, который порождает программу Java, так что он перезагружается если процесс идет вниз?

  3. Лучшее решение? Возможно, что-то вроде Python API library and shell utilities to monitor file system events, но и для Linux процессов

ответ

0

Написать Баш скрипт для запуска программы в цикле.

#!/bin/bash 
while true; do 
    java -jar offendingProgram.jar 
done 

Тогда bg сценарий, откуда вы его начинаете.

2

Supervisor - Python, размножается и управления процессами, уведомления о событиях, XML-RPC API, хорошие Docs, хорошие отзывы