如何监视python进程并在异常终止时重新启动它

时间:2016-10-15 09:11:13

标签: python linux bash

假设存在task.py,由于内存溢出而中断。如何监控并重新启动它?

import time
while(1):
    print('.')
    # simulate breaks
    time.sleep(2)
    exit(0)

由于

3 个答案:

答案 0 :(得分:2)

您可以使用看门狗。 让您的工作进程每隔10秒更新一个虚拟文件。 如果最后一次访问时间不长于20秒,请进行另一个完全独立的流程检查。 如果是,请重新启动工作进程。

有各种与操作系统相关的漂亮方法可以做同样的事情,但这种低技术的方法总是有效,甚至可以通过网络轻松实现。由于您只测量两次访问之间的时差,因此时钟甚至不必同步。

答案 1 :(得分:2)

这样的事情应该有效:

while ! /path/to/task.py; do
    echo 'restarting task...'
done

如果 task.py 以非零退出状态退出,则循环将继续并再次运行脚本。只有当 task.py 退出0时,循环才会中断。

如果您的程序出错并且始终屈服于非零退出,则最终会成为无限循环。因此,最好通过max_try值限制重启次数:

#!/bin/bash
max_try=100
count=1
while ! python /path/to/task.py; do
    ((count++)) # increment (Bashism)
    #count=$(expr $count + 1) # increment (portable)
    if [ $count -gt $max_try ]; then break; fi
    echo 'restarting task...'
done

答案 2 :(得分:0)

如果实际上内存不足,则应该OOM killed。如果您有另一个连续重启它的进程(例如while true; do /path/to/my_script.py; done),它应立即启动并再次运行。