python使用Windows的wmic命令监控文件运行状况,如有异常发送邮件报警
作者:小胡要加油 发布时间:2022-01-13 09:48:25
使用Windows的wmic命令,获取可执行文件的运行状况、文件路径、PID,如果可执行文件挂掉,就重启并邮件告警。
因为监控的可执行文件的文件名一样,不好区分,所以我使用文件的绝对路径为标准来判断是否正常运行,代码及详细解释如下:
# -*- coding: utf-8 -*-
import os
import win32api
import smtplib
from email.mime.text import MIMEText
def get_pidWay(file_name):
ept_list = []
temp_list = []
pid_way = os.popen("wmic process where name='" + file_name + "' get processid,executablepath,name").readlines()
for j in pid_way:
temp_list.append(j.split())
while ept_list in temp_list:
temp_list.remove(ept_list)
return(temp_list)
def open_file(filePath):
win32api.ShellExecute(0, 'open', filePath, '','',1)
def mailsend (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
for i in range(len(exe_info)):
if file_path in exe_info[i][0]:
pos = 1
else:
pass
if pos == 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: Connection unexpectedly closed
4.主函数:
file_path :放置可执行文件的目录;
fileName:可执行文件的文件名;
for循环来判断file_path是否在我们 get_pidWay函数返回的列表中,从而知道可执行文件是否正常运行;
如果没有运行,pos = 0,则运行文件、发送邮件。
来源:https://www.cnblogs.com/hydd/p/13743897.html
猜你喜欢
- 本文实例讲述了python监控网站运行异常并发送邮件的方法。分享给大家供大家参考。具体如下:这是一个简单的python开发的监控程序,当指定
- 本文实例总结了Python列表list常用内建函数。分享给大家供大家参考,具体如下:>>> x = list(range(
- 为了给你的对像添加一个行级功能,那就定义一个自定义方法。 有鉴于manager经常被用来用一些整表操作(table-wide),模型方法应该
- 要随机生成字符串代码如下:在MySQL中定义一个随机串的方法,然后再SQL语句中调用此方法。随机串函数定义方法:CREATE DEFINER
- PHP addcslashes() 函数实例在字符 "W" 前添加反斜杠:<?php $str = addcsla
- 当一台计算机上有多个网卡时,需要选择对应IP地址的网卡进行发送数据包或者接受数据包。1、选择网卡发包(应用scapy):plface=con
- Truncate是SQL中的一个删除数据表内容的语句,用法是:TRUNCATE TABLE [Table Name]。下面是对Truncat
- 前言全可以访问相同的对象, 因此我们讲 这种变量名也叫对象的 "引用".验证1:a = 2b = 3print(id(a
- 代码执行结构为顺序结构、选择结构、循环结构。python判断选择结构【if】if 判断条件 #进行判断条件满足之后执行下方语句 执行语句el
- 简单的说,组织体系指的就是组织信息的方式。看了一堆拗口的定义后,我根据自己的理解画了下面这个图:从上图看出,同样的图形元素由于采用了不同的组
- 终于能出来透口气,写点东西了。前段太忙,也很郁闷,现在调整过来点了。我的设计原则就是在满足需求的前提下,尽可能的简化,简化,再简化。有一次跟
- 描述tan() 返回x弧度的正弦值。语法以下是 tan() 方法的语法:import mathmath.tan(x)注意:tan()是不能直
- Python中的布尔类型Python中的布尔类型(bool)只有两个取值,分别是True和False。bool类型通常用于逻辑判断和条件控制
- Python特别灵活,肯定方法不止一种,这里介绍一种我觉得比较简单的方法。如下图,使用x == np.max(x) 获得一个掩模矩阵,然后使
- 一、概念介绍Thread 是threading模块中最重要的类之一,可以使用它来创建线程。有两种方式来创建线程:一种是通过继承Thread类
- 1.apache配置文件中打开vhost的配置LoadModule vhost_alias_module modules/mod_vhost
- Python编写类的时候,每个函数参数第一个参数都是self,一开始我不管它到底是干嘛的,只知道必须要写上。后来对Python渐渐熟悉了一点
- 本文实例讲述了thinkPHP框架通过Redis实现增删改查操作的方法。分享给大家供大家参考,具体如下:一、概述Redis是一个NoSQL数
- 进程、线程和协程之间的关系和区别也困扰我一阵子了,最近有一些心得,写一下。进程拥有自己独立的堆和栈,既不共享堆,亦不共享栈,进程由操作系统调
- 如果你想用Python开发Windows程序,并让其开机启动等,就必须写成windows的服务程序Windows Service