1. 先说答案
对于像我这种没有耐心的同学,我这里先直接给出答案。这里先说明几个前提:
- 假设要运行的脚本名称为 handle.py,通常该脚本里面是一个循环运行的程序,对应着某个服务或者处理端,当然,也可以只是一个简单的程序,这个不重要,重要的是我们需要该脚本一直在运行,如果脚本因为某些不可抗拒的因素终止了,需要能够检测到并且自动重启该脚本;
- 脚本直接运行的命令为:python3 action.py,而且需要运行在Linux系统下,这个没什么说的;
- 我们的目的:通过一个监测程序监测 action.py 的脚本的运行情况,如果该脚本没有运行则启动该脚本;如果该脚本运行,则无操作。核心就是监测程序 monitor.py,代码如下:
# 脚本运行监测脚本,monitor.py
import subprocess
import datetime
import time
while True:
'''
通过查看当前进程来判断处理程序是否还活着
'''
res = subprocess.Popen('ps -ef | grep handle.py', stdout=subprocess.PIPE, shell=True)
attn = res.stdout.readlines()
'''
attn的长度大于等于2
如果为2,代表图像检测程序异常;
如果大于等于2,代表一切正常;
'''
if len(attn) == 2:
print('%s 处理程序异常,重启...' % datetime.datetime.now())
subprocess.Popen('python3 handle.py', stdout=open('./handle.log', 'a+'), shell=True)
with open('./monitor.log', 'a+') as f:
f.write('%s 处理程序异常,重启...\n' % datetime.datetime.now())
else:
print('%s handle.py 正常...' % datetime.datetime.now())
# 休眠五秒钟,然后再次检测脚本运行
time.sleep