多个相同名称进程的情况下 python脚本监控某个进程



若一台机器上同时运行着多个相同名称的进程(进程号是不同的),我们应该如何监控这些进程是否还在正常运行呢?

如下图:

wKiom1VxcMPh0G54AADo_p7MB40257.jpg

正在运行着两个相同名称的进程




下面这个脚本实现了每隔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/目录下形成一个以进程号命令的目录,如下:

wKiom1VxcqqzX_WmAADed0Iymas428.jpg


   我们进入1548这个目录看下:

   cd 1548

wKiom1Vxc0axDF1PAAWGE_Tcs1o161.jpg