python寫個進程監控的腳本

jopen 9年前發布 | 2K 次閱讀 Python

    class_config.py

#!/usr/bin/env python  
#coding:utf-8  

'''''此處定義郵件的相關參數'''  
class Mail_conf():  
    sender = 'fyxichen@126.com'  
    receiver = 'fyxichen@126.com'  
    host = 'smtp.126.com'  
    port = '25'  
    user = 'fyxichen@126.com'  
    passwd = '123456'  
    log_dir = 'sendmail_err_log'  

'''''此處定義監控程序以及啟動路徑,啟動路徑不能包含中文'''  
#用法{程序名稱:啟動口令}  
#配置重啟日志名稱,不能為空。  
class ProgramPath():  
    Path =  {'RTX.exe':'/home/admin',  
             'Foxmail.exe':'D:\Program Files (x86)\jisupdf',  
             'QQ.exe':'D:\Program Files (x86)\Tencent\QQ\Bin\qq.exe',}  
    Restart_Log_path = 'Restart_log_path'   </pre> 


SendMail.py

!/usr/bin/env python

coding:utf-8

import string,time
import smtplib
from email.mime.text import MIMEText
from email.header import Header
from class_config import Mail_conf
'''''發送郵件類'''
def send_mail(Title,context):

msg = MIMEText(context,'plain','utf-8')  
msg['Subject'] = Header(Title,'utf-8')  
try:  
    smtp = smtplib.SMTP()    
    smtp.connect(Mail_conf.host,Mail_conf.port)    
    smtp.login(Mail_conf.user, Mail_conf.passwd)    
    smtp.sendmail(Mail_conf.sender, Mail_conf.receiver, msg.as_string())    
    smtp.quit()  
except Exception,e:  
    Writelog = open(Mail_conf.log_dir,'ab')  
    log = '%s-->%s\n' % (time.strftime('%Y-%m-%d %H:%M:%S'),str(e))  
    print log  
    Writelog.write(log)  
    Writelog.close()  

if name == "main":
send_mail("Test Mail","這是一封測試郵件,更改郵箱配置在class_config.py中配置") </pre>

    ProcessMoniter.py

#!/usr/bin/env python  
#coding:utf-8  
import psutil,time  
import subprocess  
from class_config import ProgramPath  

def monitor():  

     Time = time.time()  
     log = open(ProgramPath.Restart_Log_path,'ab+')  
     log.write('****************%s****************\n' % time.strftime('%Y-%m-%d %H:%M:%S'))  
     log.close()  
     while True:  
         ProcessName = ProgramPath.Path.keys()  
         Process = psutil.process_iter()  
         for i in Process:  
             try:  
                 if i.name() in ProcessName:  
                     ProcessName.remove(i.name())  
             except Exception,e:  
                 pass  
         for i in ProcessName:  
             try:  
                 Restart = subprocess.Popen(ProgramPath.Path[i],shell=False)  
             except Exception,e:  
                 err_log = '%s-->%s\n' % (time.strftime('%Y-%m-%d %H:%M:%S'),str(e).strip())              
                 log = open(ProgramPath.Restart_Log_path,'ab+')  
                 log.seek(-(len(str(e))),2)  
                 if log.readline().strip() == str(e).strip():  
                     if Time + 60 > time.time():  
                         pass  
                     else:  
                         log.seek(0,2)  
                         log.write(err_log)  
                         log.close()  
                         Time = time.time()  
                 else:  
                     log.seek(0,2)  
                     log.write(err_log)  
                     log.close()  
                     Time = time.time()  
         time.sleep(2)  
if __name__ == "__main__":  
    monitor()   </pre> 


    Net_io.py

#!/usr/bin/env python  
#coding:utf-8  
import psutil  
import time  
import sys  
from optparse import OptionParser  
parser = OptionParser()    
parser.add_option("-t", "--time", dest="time",  
                  help="此參數可查看當前下載占的帶寬,-t是測試時間", metavar="10")    

def Net_io(s):  
    x = 0  
    sum = 0  
    while True:  
        if x >= s:  
            break  
        r1 = psutil.net_io_counters().bytes_recv  
        time.sleep(1)  
        r2 = psutil.net_io_counters().bytes_recv  
        y = r2 - r1  
        print "%.2f Kb/s" % (y / 1024.0)  
        sum += y  
        x += 1  
    result = sum / x  
    print "\033[1;32m %s秒內平均速度:%.2f Kb/s \033[1;m"  % (x,result / 1024.0)  
if __name__ == "__main__":  
    (options, args) = parser.parse_args()    
    if options.time:  
        Net_io(options.time)  
    else:  
        Net_io(10)  </pre> 


    sysinfo.py

#!/usr/bin/env python  
#coding:utf-8  
import psutil  
import time  
import sys  

def Sysinfo():  
    Boot_Start = time.strftime("%Y-%m-%d %H:%M:%S",time.localtime(psutil.boot_time()))    
    time.sleep(0.5)  
    Cpu_usage = psutil.cpu_percent()  
    RAM = int(psutil.virtual_memory().total/(1027*1024))  
    RAM_percent = psutil.virtual_memory().percent  
    Swap = int(psutil.swap_memory().total/(1027*1024))  
    Swap_percent = psutil.swap_memory().percent  
    Net_sent = psutil.net_io_counters().bytes_sent  
    Net_recv = psutil.net_io_counters().bytes_recv  
    Net_spkg = psutil.net_io_counters().packets_sent  
    Net_rpkg = psutil.net_io_counters().packets_recv  
    if __name__ == "__main__":  
        BFH = r'%'  
        print " \033[1;32m開機時間:%s\033[1;m"  % Boot_Start  
        print " \033[1;32m當前CPU使用率:%s%s\033[1;m" % (Cpu_usage,BFH)  
        print " \033[1;32m物理內存:%dM\t使用率:%s%s\033[1;m" % (RAM,RAM_percent,BFH)  
        print "\033[1;32mSwap內存:%dM\t使用率:%s%s\033[1;m" % (Swap,Swap_percent,BFH)  
        print " \033[1;32m發送:%d Byte\t發送包數:%d個\033[1;m" % (Net_sent,Net_spkg)  
        print " \033[1;32m接收:%d Byte\t接收包數:%d個\033[1;m" % (Net_recv,Net_rpkg)  

        for i in psutil.disk_partitions():  
            print " \033[1;32m盤符: %s 掛載點: %s 使用率: %s%s\033[1;m" % (i[0],i[1],psutil.disk_usage(i[1])[3],BFH)  
    else:  
        File = open("sysinfo.log","ab+")  
        File.write("CPU:%s   \tRAM:%s\tNet_recv:%d\tNet_sent:%d\r\n" % (Cpu_usage,RAM_percent,Net_recv,Net_sent))  
        File.flush()  
        File.close()  
if __name__ == "__main__":  
    Sysinfo()  </pre> 


 本文由用戶 jopen 自行上傳分享,僅供網友學習交流。所有權歸原作者,若您的權利被侵害,請聯系管理員。
 轉載本站原創文章,請注明出處,并保留原始鏈接、圖片水印。
 本站是一個以用戶分享為主的開源技術平臺,歡迎各類分享!