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数据拟合主要可采用numpy库,库的安装可直接用pip install numpy等。1. 原始数据:假如要拟合的数据yyy来自
- 最近开始在项目中使用Quickwork For Asp,虽然该框架是自己独立完成的,不过功能没做过详细的总结,所以很多参数总是会弄错,毕竟鱼
- 1、使用系统函数__import_()stringmodule = __import__('string')2、使用imp
- 1.常用数据结构之列表我们先给大家一个编程任务,将一颗色子掷6000次,统计每个点数出现的次数。这个任务对大家来说应该是非常简单的,我们可以
- 1.问题现象go编译的时候报错import cycle not allowedcycle意思很简单就是循环的意思。代表的就是一个包被循环的导
- 一、递归原理小案例分析(1)# 概述递归:即一个函数调用了自身,即实现了递归 凡是循环能做到的事,递归一般都能做到!(2)# 写
- 对于中小型个人、企业网站来说,MySQL数据库或许是目前数据库的最完美实施解决方案了。在不变更服务器硬件的前提下,一个经过良好架构,优化后的
- 一、模拟登录图书馆管理系统我们可以先看一下登录页面(很多学校这些管理系统页面就是很low):两种方式去模拟登录图书馆:1. 构造登录表单进行
- 本文实例讲述了Python快速查找算法的应用,分享给大家供大家参考。具体实现方法如下:import randomdef partition(
- $tar xvf go1.3.3.linux-amd64.tar.gz$mv go /usr/local/$vim /etc/profile
- asp如何显示全部的环境变量?<%@Language="VBScript"%><%dim H
- 前言Yolov5比较Yolov4,Yolov3等其他识别框架,速度快,代码结构简单,识别效率高,对硬件要求比较低。这篇博客针对Python+
- 本篇文章将提供有关 Python 中异步 for 循环的完整详细信息。 我们将讨论异步函数、异步 for 循环和睡眠概念。接下来,我们将讨论
- 今天有一位同学给了我一个excel文件,要求读取某些行,某些列,然后我试着做了一个demo,这里分享出来,希望能帮到大家:首先安装xlrd:
- 本文实例为大家分享了python图形用户接口实例的具体代码,供大家参考,具体内容如下运用tkinter图形库,模拟聊天应用界面,实现信息发送
- 前言问题:我们在放大图片的过程中,放大的目标图像和原图图像之间会存在不同。放大的基本思想:第一步:将目标图像进行缩小到原图像的尺寸,虚拟的将
- 当你需要一个简单易用的导航菜单得时候。CSS Menu是个不错的选择。相对于Flash/Javascript,他们小巧轻便,而且方便使用。当
- 对于信息安全有要求的,在数据下发和同步过程中需要对含有用户身份信息的敏感字段脱敏,包括用户姓名、证件号、地址等等,下面是自定义函数的代码CR
- 之前遇到过MySQL本地可以连接但是远程连不上的问题,没有记录,今天在云上新申请的服务器上又遇到这个问题,记录一下解决过程。1.排除网络或防
- 在vs2005下用到gridview时,默认的情况下gridview控件会在生成的html代码中的style属性中加入border-coll