繁体   English   中英

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

[英]How to monitor a python process and restart it upon abnormal termination

假设有一个task.py ,由于内存溢出而中断。我该如何监视并重新启动它?

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

谢谢

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

有各种各样依赖于操作系统的漂亮方法可以完成此操作,但是这种低技术含量的方法始终有效,甚至在网络上也很少。 由于您只测量两次访问之间的时差,因此甚至不必同步时钟。

这样的事情应该起作用:

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

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

如果您的程序出错并始终退出非零退出状态,则最终将成为无限循环。 因此,最好通过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

如果它实际上用完了内存,应该杀死OOM 如果您有另一个进程可以连续重新启动它(例如while true; do /path/to/my_script.py; done ),它将立即启动并再次运行。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM