前言
突然又个需求,要监控windows下本地的一个数据处理脚本.防止它挂掉.以及要自动重启.
但是没搞过呀…怎么办,硬着头皮上呀!
话说这也是奇葩需求…
教程
class Powershell:
def __init__(self,lists, Email):
self.lists = lists //需要监控的.exe名称
self.email = Email //需要发送的提醒邮件
def cmd(self,command):
'''查询.exe程序'''
args=[r"powershell",command]
p = subprocess.Popen(args,shell=True,stdout=subprocess.PIPE)
out, err = p.communicate()
exe_list = set()
for line in out.splitlines():
string = line.decode('gbk')
exe_name = re.search(r'.*.exe',string)
if not exe_name:continue
exe_list.add(exe_name.group())
print(exe_list)
return exe_list
def is_exe(self):
data = self.cmd('tasklist') //打印运行机器的所有.exe脚本.
for name,value in self.lists.items():
if name in data:
print(f'{name} 运行正常...')
else:
cmd = r'start cmd /k '+value // star cmd /k xxxx.exe 重启脚本
subprocess.Popen(cmd, shell=True)
self.email.sen(f'{value} 已经报错,监控脚本已重启!!!')
print(f'{value} 运行成功....')
结语
其实这个段代码,最重要的就是这两个命令:
1.taskilist
2.start cmd /k xxx.exe
3. subprocess.Popen比python os,sytme()好用,兼容性好.
流程就是通过tasklist获取所有进程名称,然后进行匹配.没有匹配则重启脚本.