用Python编写看门狗

时间:2012-06-17 16:27:26

标签: process signals monitoring watchdog

我需要在Ubuntu LTS上编写一个监视程序,用于第三方网络文件传输java程序,该程序每持续40到50分钟就会以4MB / s的速度进行网络传输。

我不能修改那个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程序的upstart脚本,以便在进程停止时重新启动它?

  3. 更好的解决方案? 也许类似于Python API library and shell utilities to monitor file system events,但对于linux进程

2 个答案:

答案 0 :(得分:2)

Supervisor - Python,生成和控制流程,事件通知,xml-rpc api,良好的文档,良好的评论

答案 1 :(得分:0)

编写一个bash脚本以在while循环中运行该程序。

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

然后从你开始的地方开始编写脚本。

相关问题