多个相同名称进程的情况下 python脚本监控某个进程
若一台机器上同时运行着多个相同名称的进程(进程号是不同的),我们应该如何监控这些进程是否还在正常运行呢?
如下图:
正在运行着两个相同名称的进程
下面这个脚本实现了每隔10秒钟,检测一次每个进程是否还在正常运行,若不正常运行则重新启动:
vi /data/server/bin/python/monity.py#encoding:utf-8
import os
import commands
import time
def monitypid():
while True:
os.system('> /data/server/server-lszc/dirfile')
alldir=os.popen("ls -l /proc/ | grep '^d' |awk '{print $9}'").readlines() #获取/proc/目录下所有的目录
for dir in alldir:
try:
newdir=dir.strip()
os.chdir('/proc/'+newdir) #改变当前的目录
os.system('ls -l >> /data/server/server-lszc/dirfile 2> /dev/null')
except:
pass
DBServerfile=commands.getoutput('cat /data/server/server-lszc/dirfile | grep /data/server/server-lszc/DBServer') #这个grep是关键
if not DBServerfile: #若newpathfile值为空,则重新启动进程启动脚本
os.system('bash /data/server/server-lszc/start.sh')
os.system('echo $(date +%F-%H:%M:%S) >> /var/log/DBServer.log')
os.system('echo "/data/server/server-lszc/DBServer is reload" >> /var/log/DBServer.log')
time.sleep(10) #每10秒钟检测一次
if __name__ == '__main__':
monitypid()
nohup python /data/server/bin/python/monity.py & #放在后台运行
写到/etc/rc.local,设置开机自动启动
注意:
所有的进程都会在/proc/目录下形成一个以进程号命令的目录,如下:
我们进入1548这个目录看下:
cd 1548