[英]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.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
如果它实际上用完了内存,应该杀死OOM 。 如果您有另一个进程可以连续重新启动它(例如while true; do /path/to/my_script.py; done
),它将立即启动并再次运行。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.