Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/linux/26.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何监视python进程并在异常终止时重新启动它_Python_Linux_Bash - Fatal编程技术网

如何监视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
只是一个建议,但是如果程序持续失败,那么这就是一个尖叫循环。也许用重新启动计数来检查是否正常?