【问题标题】:Writing a watchdog in Python用 Python 编写看门狗
【发布时间】:2012-06-17 16:27:25
【问题描述】:

我需要在 Ubuntu LTS 上为第 3 方网络文件传输 java 程序编写一个看门狗,该程序每 40-50 分钟持续网络传输@4MB/s 就会死掉。

我无法修改那个 java 程序,但它是通过 upstart 产生的。

我当前的看门狗正忙着等待:

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 进程

【问题讨论】:

    标签: process signals monitoring watchdog


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

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

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

      然后从你开始的地方复制脚本。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2012-08-15
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多