如何监视python进程并在异常终止时重新启动它
假设有一个如何监视python进程并在异常终止时重新启动它,python,linux,bash,Python,Linux,Bash,假设有一个task.py,由于内存溢出而中断。如何监视并重新启动它 import time while(1): print('.') # simulate breaks time.sleep(2) exit(0) 谢谢您可以使用看门狗。 让您的工作进程每10秒更新一个Dummy文件。 进行另一个完全独立的进程检查,检查最后一次访问是否不再是20秒前的访问。 如果是,请重新启动工作进程 有各种漂亮的依赖操作系统的方法可以做到这一点,但这种低技术的方法总是有效的,即
task.py
,由于内存溢出而中断。如何监视并重新启动它
import time
while(1):
print('.')
# simulate breaks
time.sleep(2)
exit(0)
谢谢您可以使用看门狗。
让您的工作进程每10秒更新一个Dummy文件。
进行另一个完全独立的进程检查,检查最后一次访问是否不再是20秒前的访问。
如果是,请重新启动工作进程
有各种漂亮的依赖操作系统的方法可以做到这一点,但这种低技术的方法总是有效的,即使是在网络上。由于您只测量两次访问之间的时间差,因此时钟甚至不必同步。如果它实际上耗尽了内存,它应该得到。如果您有另一个进程连续重新启动它(例如,当为true时
;do/path/to/my_script.py;done
),它应该立即启动并再次运行。类似的操作应该可以:
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
为什么进程内存不足?你需要解决这个问题。对于重新启动,您可以看看如何管理重新启动失败的进程。那么,如何重新启动它。@pandaZW:它已经存在了。
while的第一行启动/重新启动脚本。如果task.py没有shebang行(#!/usr/bin/python
),那么将/path/to/task.py
更改为python/path/to/task.py
只是一个建议,但是如果程序持续失败,那么这就是一个尖叫循环。也许用重新启动计数来检查是否正常?