国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 編程 > Python > 正文

代碼講解Python對Windows服務(wù)進(jìn)行監(jiān)控

2020-01-04 15:51:51
字體:
供稿:網(wǎng)友

我們首先來看下python的全部代碼,大家可以直接復(fù)制后測試:

#-*- encoding: utf-8 -*-  import logging  import wmi  import os  import time  from ConfigParser import ConfigParser  import smtplib  from email.mime.text import MIMEText  import socket from datetime import datetime import re import sys import time import string import psutil  import threading from threading import Timer   import logging # 創(chuàng)建一個logger  logger = logging.getLogger('Monitor')  logger.setLevel(logging.DEBUG)     # 創(chuàng)建一個handler,用于寫入日志文件  fh = logging.FileHandler('test.log')  fh.setLevel(logging.DEBUG)     formatter = logging.Formatter('%(asctime)s - %(name)s - %(levelname)s - %(message)s')  fh.setFormatter(formatter)  logger.addHandler(fh)  reload(sys) # Python2.5 初始化后會刪除 sys.setdefaultencoding 這個方法,我們需要重新載入  sys.setdefaultencoding('utf-8')   def send_mail(to_list,sub,content):    CONFIGFILE = 'config.ini'    config = ConfigParser()    config.read(CONFIGFILE)    mail_host=config.get('Mail','mail_host')      #使用的郵箱的smtp服務(wù)器地址,這里是163的smtp地址    mail_user=config.get('Mail','mail_user')              #用戶名    mail_pass=config.get('Mail','mail_pass')                #密碼    mail_postfix=config.get('Mail','mail_postfix')           #郵箱的后綴,網(wǎng)易就是163.com    me=sub+"<"+mail_user+"@"+mail_postfix+">"    msg = MIMEText(content,_subtype='plain',_charset='utf-8')    msg['Subject'] = sub    msg['From'] = me    msg['To'] = ";".join(to_list)        #將收件人列表以‘;'分隔    try:      server = smtplib.SMTP()      server.connect(mail_host)              #連接服務(wù)器      server.login(mail_user,mail_pass)        #登錄操作      server.sendmail(me, to_list, msg.as_string())      server.close()      return True    except Exception, e:      print str(e)     logger.info(str(e))        return False     #讀取配置文件中的進(jìn)程名和系統(tǒng)路徑,這2個參數(shù)都可以在配置文件中修改 ProList = []  #定義一個列表 c = wmi.WMI()   #獲取進(jìn)程所用內(nèi)存 def countProcessMemoey(processName):   try:     CONFIGFILE = 'config.ini'      config = ConfigParser()      config.read(CONFIGFILE)       pattern = re.compile(r'([^/s]+)/s+(/d+)/s.*/s([^/s]+/sK)')     cmd = 'tasklist /fi "imagename eq ' + processName + '"' + ' | findstr.exe ' + processName     result = os.popen(cmd).read()     resultList = result.split("/n")     totalMem = 0.0     totalCpu = 0.0      print "*" * 80     for srcLine in resultList:       srcLine = "".join(srcLine.split('/n'))       if len(srcLine) == 0:         break       m = pattern.search(srcLine)       if m == None:         continue       #由于是查看python進(jìn)程所占內(nèi)存,因此通過pid將本程序過濾掉       if str(os.getpid()) == m.group(2):         continue       p = psutil.Process(int(m.group(2)))       cpu = p.cpu_percent(interval=1)         ori_mem = m.group(3).replace(',','')       ori_mem = ori_mem.replace(' K','')       ori_mem = ori_mem.replace(r'/sK','')       memEach = string.atoi(ori_mem)       totalMem += (memEach * 1.0 /1024)       totalCpu += cpu       print 'ProcessName:'+ m.group(1) + '/tPID:' + m.group(2) + '/tmemory size:%.2f'% (memEach * 1.0 /1024), 'M' + ' CPU:'+str(cpu)+'%'     print 'ProcessName:'+ m.group(1)+' TotalMemory:'+str(totalMem)+'M'+' totalCPU:'+str(totalCpu)+'%'     logger.info('ProcessName:'+ m.group(1)+' TotalMemory:'+str(totalMem)+'M'+' totalCPU:'+str(totalCpu)+'%')     print "*" * 80           if totalMem> float(config.get('MonitorProcessValue','Memory')):       print 'Memory Exceed!'       IP = socket.gethostbyname(socket.gethostname())       now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')       subject = IP +' ' + processName + '內(nèi)存使用量過高!'       content = now + ' ' + IP +' ' + processName + '內(nèi)存使用量過高,達(dá)到'+str(totalMem) +'M/n請盡快處理!'       logger.info(processName +'內(nèi)存使用量過高,達(dá)到'+str(totalMem) +'M')       send_mail(['sunwei_work@163.com','sunweiworkplace@gmail.com'],subject, content)     if totalCpu > float(config.get('MonitorProcessValue','CPU')):       print 'CPU Exceed!'       IP = socket.gethostbyname(socket.gethostname())       now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')       subject = IP +' ' + processName + 'CPU使用率過高!'       content = now + ' ' + IP +' ' + processName + 'CPU使用率過高,達(dá)到'+str(totalCpu)+'%/n請盡快處理!'       logger.info(processName +'CPU使用率過高,達(dá)到'+str(totalMem) +'M')       send_mail(['sunwei_work@163.com','sunweiworkplace@gmail.com'],subject, content)   except Exception, e:      print str(e)     logger.info(str(e))     #判斷進(jìn)程是否存活 def judgeIfAlive(ProgramPath,ProcessName):   try:     print datetime.now().strftime('%Y-%m-%d %H:%M:%S')     for process in c.Win32_Process():        ProList.append(str(process.Name))      #把所有任務(wù)管理器中的進(jìn)程名添加到列表      if ProcessName in ProList:       countProcessMemoey(ProcessName)      #判斷進(jìn)程名是否在列表中,如果是True,則所監(jiān)控的服務(wù)正在 運(yùn)行狀態(tài),     #打印服務(wù)正常運(yùn)行       print ''        print ProcessName+" Server is running..."        print ''        logger.info(ProcessName+" Server is running...")     else:        #如果進(jìn)程名不在列表中,即監(jiān)控的服務(wù)掛了,則在log文件下記錄日志       #日志文件名是以年月日為文件名       IP = socket.gethostbyname(socket.gethostname())       now = datetime.now().strftime('%Y-%m-%d %H:%M:%S')       subject = IP +' ' + ProcessName + '已停止運(yùn)行!'       logger.info( ProcessName + '已停止運(yùn)行!')       content = now + ' ' + IP +' ' + ProcessName + '已停止運(yùn)行!' +'/n請盡快處理!'       send_mail(['sunwei_work@163.com','sunweiworkplace@gmail.com'],subject, content)       print ProcessName+' Server is not running...'        #打印服務(wù)狀態(tài)       logger.info('/n'+'Server is not running,Begining to Restart Server...'+'/n'+(time.strftime('%Y-%m-%d %H:%M:%S --%A--%c', time.localtime()) +'/n'))       #寫入時間和服務(wù)狀態(tài)到日志文件中       os.startfile(ProgramPath)        #調(diào)用服務(wù)重啟       logger.info(ProcessName+'Restart Server Success...'+'/n'+time.strftime('%Y-%m-%d %H:%M:%S --%A--%c', time.localtime()))       print ProcessName+'Restart Server Success...'        print time.strftime('%Y-%m-%d %H:%M:%S --%A--%c', time.localtime())      del ProList[:]      #清空列表,否則列表會不停的添加進(jìn)程名,會占用系統(tǒng)資源   except Exception, e:      print str(e)     logger.info(str(e))   def startMonitor(ProgramPathDict,ProcessNameDict) :    for i in range(0,len(ProcessNameDict)):     judgeIfAlive(ProgramPathDict[i],ProcessNameDict[i]) if __name__=="__main__" :    CONFIGFILE = 'config.ini'    config = ConfigParser()    config.read(CONFIGFILE)    ProgramPathDict = config.get('MonitorProgramPath','ProgramPath').split("|")    ProcessNameDict = config.get('MonitorProcessName','ProcessName').split("|")   while True:      startMonitor(ProgramPathDict,ProcessNameDict)      time.sleep(int(config.get('MonitorProcessValue','Time'))) 

所用配置文件config.ini

[MonitorProgramPath]  ProgramPath: C:/Windows/System32/services.exe|C:/Program Files (x86)/Google/Chrome/Application/chrome.exe  [MonitorProcessName]  ProcessName: services.exe|chrome.exe [MonitorProcessValue] Memory:5000.0 CPU:50.0 Time:60 [Mail]  mail_host: smtp.163.com mail_user:  mail_pass:  mail_postfix: 163.com 

以上就是本次小編整理的關(guān)于Python對Windows服務(wù)進(jìn)行監(jiān)控的全部代碼內(nèi)容,感謝你對VEVB武林網(wǎng)的支持。


注:相關(guān)教程知識閱讀請移步到python教程頻道。
發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 门源| 乌鲁木齐县| 鄂尔多斯市| 郸城县| 钟祥市| 上栗县| 蓝山县| 涟源市| 祁门县| 成安县| 玉林市| 巴林左旗| 林西县| 固始县| 格尔木市| 天祝| 门源| 上思县| 蓝山县| 哈尔滨市| 鄂伦春自治旗| 盐边县| 云霄县| 灵石县| 洛浦县| 宁德市| 陆丰市| 普洱| 育儿| 汶上县| 黄山市| 南雄市| 会同县| 诸城市| 开江县| 佛山市| 宜君县| 富锦市| 忻城县| 丹凤县| 军事|