python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
使用Windows的wmic命令,获取可执行文件的运行状况、文件路径、PID,如果可执行文件挂掉,就重启并邮件告警。
因为监控的可执行文件的文件名一样,不好区分,所以我使用文件的绝对路径为标准来判断是否正常运行,代码及详细解释如下:
#-*-coding:utf-8-*-
importos
importwin32api
importsmtplib
fromemail.mime.textimportMIMEText
defget_pidWay(file_name):
ept_list=[]
temp_list=[]
pid_way=os.popen("wmicprocesswherename='"+file_name+"'getprocessid,executablepath,name").readlines()
forjinpid_way:
temp_list.append(j.split())
whileept_listintemp_list:
temp_list.remove(ept_list)
return(temp_list)
defopen_file(filePath):
win32api.ShellExecute(0,'open',filePath,'','',1)
defmailsend(mailtext,mailsubject):
mailserver="smtp.qq.com"
username_send='发送的邮箱地址'
password='密码'
username_recv='接收的邮箱地址'
mail=MIMEText(mailtext)
mail['Subject']=mailsubject
mail['From']=username_send
mail['To']=username_recv
smtp=smtplib.SMTP_SSL(mailserver)
smtp.login(username_send,password)
smtp.sendmail(username_send,username_recv,mail.as_string())
smtp.quit()
print('success')
file_path="可执行文件的绝对路径"
fileName='可执行文件名'
mailtext='报警邮件内容'
mailsubject='报警邮件标题'
exe_info=get_pidWay(fileName)
pos=0
foriinrange(len(exe_info)):
iffile_pathinexe_info[i][0]:
pos=1
else:
pass
ifpos==1:
pass
else:
open_file(r"可执行文件名")
mailsend(mailtext,mailsubject)
1.get_pidWay函数:
输入file_name,返回文件路径、文件名、文件Pid的列表,用split函数和ept_list字符串使返回的列表变成[[文件路径,文件名,Pid],[文件路径,文件名,Pid]]这样的二维数组;
2.open_file函数:
使用win32api模块,类似在cmd中执行程序,打开指定的可执行文件;
3.mailsend函数:
发送邮件,我用的qq的smtp模块,在qq邮箱的设置里可以开启smtp端口;
username_send发送邮件的邮箱地址,password是开启smtp端口时弹出的字符串;
username_recv收邮件的邮箱地址;
在内网要采用smtplib.SMTP_SSL(mailserver)连接(其中mailserver=‘smtp.qq.com'),使用smtp=smtplib.SMTP(mailserver,port=465)方式会报错:smtplib.SMTPServerDisconnected:Connectionunexpectedlyclosed
4.主函数:
file_path:放置可执行文件的目录;
fileName:可执行文件的文件名;
for循环来判断file_path是否在我们get_pidWay函数返回的列表中,从而知道可执行文件是否正常运行;
如果没有运行,pos=0,则运行文件、发送邮件。
以上就是python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警的详细内容,更多关于pythonwmic命令监控文件运行状况的资料请关注毛票票其它相关文章!