小米的博客
感恩能够遇见

在平时工作中常有遇到服务器程序宕掉的情况,所以最近有空用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)

 

 

这篇文章还没有人发言,快抢第一!

发表评论