2012-06-17 212 views
2

我需要在Ubuntu LTS上编写一个看门狗,用于第三方网络文件传输java程序,该程序在每4至4MB/s持续网络传输每40至50分钟就会死掉。用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

写bash脚本在while循环运行程序。

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

然后bg从哪里开始它的脚本。

2

Supervisor - Python,产生和控制进程,事件通知,xml-rpc api,好文档,好评