在平时工作中常有遇到服务器程序宕掉的情况,所以最近有空用python写了个进程监控程序。程序的主要功能就是监视进程,一旦被监视的进程死掉,就自动重启程序,然后发送报警邮件,写异常日子。
本程序主要用到smtplib、ConfigParser、wmi、os几个模块同时也用到了py2exe打包程序。
程序在运行的时候需要读取config.ini文件,文件内容如下:
[app]
appname:QQ.exe
apppath:D:\Program Files (x86)\Tencent\QQ\Bin
[email]
fromm:xiaomi@itellmi.com
fromn:yami
pass:********
smtp:smtp.exmail.qq.com
to:itellmi@126.com
主程序如下:
# -*- coding: utf-8 -*-
import ConfigParser
import string
import wmi
from email import encoders
from email.header import Header
from email.mime.text import MIMEText
from email.utils import parseaddr, formataddr
import smtplib,datetime
import time
import os,shutil
path = os.getcwd()
dirpath = path + '\\config.ini'
config = ConfigParser.ConfigParser()
config.read(dirpath)
from_addr = config.get('email','fromm')
from_name = config.get('email','fromn')
passwd = config.get('email','pass')
smtp_server = config.get('email','smtp')
to = config.get('email','to')
app = config.get('app','appname')
apppath = config.get('app','apppath')
def writetext():
logname = 'applog'+ time.strftime("%Y%m%d") + '.txt'
fp = open(logname,'a')
logtext = 'app is restart ,mail have send' + str(datetime.datetime.now()) + '\n'
fp.write(logtext)
fp.close()
os.chdir(path)
def startapp():
dir = '\"' + apppath + '\\' + app + '\"'
os.system(dir)
def log():
logdir = []
logdir = os.listdir(path)
if 'log' in logdir and os.path.isdir('log'):
os.chdir('.\\log')
writetext()
elif 'log' in logdir and os.path.isfile('log'):
os.remove('.\\log')
os.mkdir('log')
os.chdir('.\\log')
writetext()
else:
os.mkdir('log')
os.chdir('.\\log')
writetext()
def sendmail():
msg = MIMEText('接口程序已经卡死,请悉知', 'plain', 'utf-8')
msg['From'] = from_addr
to_addr = []
to_addr = to.split(',')
msg['To'] = to
msg['Subject'] = Header(u'程序监控', 'utf-8').encode()
server = smtplib.SMTP(smtp_server, 25)
server.login(from_addr, passwd)
server.sendmail(from_addr, to_addr, msg.as_string())
server.quit()
log()
startapp()
def main():
c = wmi.WMI()
Prolist = []
for process in c.Win32_Process():
Prolist.append(str(process.Name))
if app in Prolist:
pass
else:
sendmail()
if __name__ == "__main__":
while True:
main()
time.sleep(100)
这篇文章还没有人发言,快抢第一!