进程监控的python脚本详解编程语言

class_config.py 
 
#!/usr/bin/env python 
#coding:utf-8 
 
'''此处定义邮件的相关参数''' 
class Mail_conf(): 
    sender = [email protected]' 
    receiver = [email protected]' 
    host = 'smtp.126.com' 
    port = '25' 
    user = [email protected]' 
    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'  

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中配置") 
 

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()  

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)

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()

主程序就不写了,大家自己看情况用就好了,好久没写过python了写的不好大家见谅

都是一个功能一个文件,直接运行也可以组织起来调用

原创文章,作者:Maggie-Hunter,如若转载,请注明出处:https://blog.ytso.com/8339.html

(0)
上一篇 2021年7月18日
下一篇 2021年7月18日

相关推荐

发表回复

登录后才能评论