Python测试进阶——(3)编写Python程序监控计算机的服务是否正常运行
用python写了个简单的监控进程的脚本,当发现进程消失的时候,立即调用服务,开启服务。
脚本的工作原理是这样的:脚本读取配置文件,读取预先配置好的调用系统服务的路径和所要监控的服务在进程管理器中的进程名,之所以要用配置文件,是为了方便给需要的朋友,你只需要修改进程名和系统路径,源代码就不需要修改了。具体的看代码中的注释吧。下面的是配置文件 config.ini
[MonitorProgramPath] ProgramPath: D:\Program Files (x86)\Tencent\WeChat\WeChat.exe [MonitorProcessName] ProcessName: WeChat.exe
上面可以根据你的需求配置不同的路径和进程名,我是需要监控 WeChat.exe 这个程序,那就配置好他的调用的系统路径和他在任务管理器里面的进程名。
下面来看看代码:
# -*- encoding: utf-8 -*-
import psutil
import os
import time
from configparser import ConfigParser
CONFIGFILE = 'config.ini'
config = ConfigParser()
config.read(CONFIGFILE)
ProgramPath = config.get('MonitorProgramPath', 'ProgramPath')
ProcessName = config.get('MonitorProcessName', 'ProcessName')
# 读取配置文件中的进程名和系统路径,这2个参数都可以在配置文件中修改
ProList = []
# 定义一个列表
pids = psutil.pids()
def main():
for pid in pids:
ProList.append(str(psutil.Process(pid).name()))
# 把所有任务管理器中的进程名添加到列表
if ProcessName in ProList:
# 判断进程名是否在列表中,如果是True,则所监控的服务正在 运行状态,
# 打印服务正常运行
print('')
print("Server is running...")
print('')
else:
# 如果进程名不在列表中,即监控的服务挂了,则在log文件下记录日志
# 日志文件名是以年月日为文件名
print("Server is not running...")
# f = open('.\\log\\' + time.strftime("%Y%m%d", time.localtime()) + '-exception.txt', 'a')
f = open('log.txt', 'a')
print('Server is not running,Begining to Restart Server...')
# 打印服务状态
f.write('\n' + 'Server is not running,Begining to Restart Server...' + '\n')
f.write(time.strftime('%Y-%m-%d %H:%M:%S --%A--%c', time.localtime()) + '\n')
# 写入时间和服务状态到日志文件中
os.startfile(ProgramPath)
# 调用服务重启
f.write('Restart Server Success...' + '\n')
f.write(time.strftime('%Y-%m-%d %H:%M:%S --%A--%c', time.localtime()))
f.close()
# 关闭文件
print('Restart Server Success...')
print(time.strftime('%Y-%m-%d %H:%M:%S --%A--%c', time.localtime()))
del ProList[:]
# 清空列表,否则列表会不停的添加进程名,会占用系统资源
if __name__ == "__main__":
while True:
main()
time.sleep(10)
# 每隔10秒调用脚本看下服务是否正常,如果不正常则重启服务,如果正常,则打印服务正常
执行后,控制台返回如下信息:

因为没有打开WeChat程序,脚本每隔10s试图启动该进程,脚本正常工作。
打开log.txt,显示如下内容:
Server is not running,Begining to Restart Server... -- :: --Friday--Fri Jun :: Restart Server Success... -- :: --Friday--Fri Jun :: Server is not running,Begining to Restart Server... -- :: --Friday--Fri Jun :: Restart Server Success... -- :: --Friday--Fri Jun :: Server is not running,Begining to Restart Server... -- :: --Friday--Fri Jun :: Restart Server Success... -- :: --Friday--Fri Jun ::
Python测试进阶——(3)编写Python程序监控计算机的服务是否正常运行的更多相关文章
- 从零使用Python测试。Testing Using Python.
0. 写在前面 本人使用Python测试已有多年,略有些皮毛经验.每次有新员工入职,都会从头教一遍如何入门上手使用Python进行测试.趁这段有空,整理成文档,也好方便后续新员工学习.文章如有不妥之处 ...
- 【python测试开发栈】python基础语法大盘点
周边很多同学在用python,但是偶尔会发现有人对python的基础语法还不是特别了解,所以帮大家梳理了python的基础语法(文中的介绍以python3为例).如果你已然是python大牛,可以跳过 ...
- 【python测试开发栈】python内存管理机制(一)—引用计数
什么是内存 在开始进入正题之前,我们先来回忆下,计算机基础原理的知识,为什么需要内存.我们都知道计算机的CPU相当于人类的大脑,其运算速度非常的快,而我们平时写的数据,比如:文档.代码等都是存储在磁盘 ...
- 【python测试开发栈】—python内存管理机制(二)—垃圾回收
在上一篇文章中(python 内存管理机制-引用计数)中,我们介绍了python内存管理机制中的引用计数,python正是通过它来有效的管理内存.今天来介绍python的垃圾回收,其主要策略是引用计数 ...
- Python测试进阶——(5)Python程序监控指定进程的CPU和内存利用率
用Python写了个简单的监控进程的脚本monitor190620.py,记录进程的CPU利用率和内存利用率到文件pid.csv中,分析进程运行数据用图表展示. 脚本的工作原理是这样的:脚本读取配置文 ...
- Python测试进阶——(4)Python程序监控、存储、分析并可视化CPU和内存利用率
monitor190617.py 监控cpu和内存利用率信息,组织成json格式,并写入到 record.txt 文件中: import psutil import time import json ...
- Python测试进阶——(7)动手编写Bash脚本启动Python监控程序并传递PID
如下: #./cf_workload_functions.sh function timestamp(){ # get current timestamp sec=`date +%s` nanosec ...
- Python测试进阶——(1)安装Python测试相关模块
安装python 安装pip yum -y install epel-release yum -y install python-pip 安装psutil 参考:https://www.cnblogs ...
- Python测试进阶——(6)Bash脚本启动Python监控程序并传递PID
用HiBench执行Hadoop——Sort测试用例,进入 /HiBench-master/bin/workloads/micro/sort/hadoop 目录下,执行命令: [root@node1 ...
随机推荐
- Java日期时间API系列9-----Jdk8中java.time包中的新的日期时间API类的Period和Duration的区别
1.Period final修饰,线程安全,ISO-8601日历系统中基于日期的时间量,例如2年3个月4天. 主要属性:年数,月数,天数. /** * The number of years. */ ...
- 循环语句(while语句和do...while语句)
1.while语句:如果条件成立,就继续循环,直到条件不成立为止.格式如下: while (条件) { 循环体(语句或语句块) } 2.do…while语句:如果条件成立, ...
- (踩过的坑)使用Github Page搭建个人博客
最近需要搭建一个网站,作为导航网址,但是自己的域名备案还要等上几天,就想着有没有别的办法来搭建一个公网可以访问的网站. Github Page的话是一个github个人主页,完全适合用来搭建普通网站. ...
- luogu P2280 激光炸弹(二维前缀和)
由题给的xi, yi范围,可以建立二维地图maze[i][j],记录i j范围上的所有目标的价值总和 即有maze[xi][yi] += wi 然后接下来的目标就是求出该二维数组的前缀和 可得到前缀和 ...
- C 语言入门---第十一章---C语言重要知识点补充
====C语言typedef 的用法==== 1. C语言允许为一个数据类型起一个新的别名,就像给人起绰号一样. typedef OldName newName; typedef 和 #define ...
- Python学习第十五课——类的基本思想(实例化对象,类对象)
类的基本思想 类:把一类事物的相同的特征和动作整合到一起就是类类是一个抽象的概念 对象:就是基于类而创建的一个具体的事物(具体存在的)也是特征和动作整合到一块 对象写法 # 对象写法 def scho ...
- 02-03Android学习进度报告三
今天主要学习了线性布局和相对布局的概念和区别,以及线性布局和相对布局的优缺点. 经过搜素发现,我们屏幕适配的使用用的比较多的就是LinearLayout的权重属性weight,我 学习了一些 Line ...
- python中numpy.concatenate()函数的使用
numpy库数组拼接np.concatenate 原文:https://blog.csdn.net/zyl1042635242/article/details/43162031 思路:numpy提供了 ...
- Linux centosVMware shell中的函数、shell中的数组、
一.shell中的函数 函数就是把一段代码整理到了一个小单元中,并给这个小单元起一个名字,当用到这段代码时直接调用这个小单元的名字即可. 格式: function _name() { command ...
- 理解JS中的回调(Callback)函数
今天写代码时写了一个函数,想实现Nodejs查询pgSQL的数据查出来并把结果作为返回值,结果发现拿不到这个值,查了下资料才恍然大悟,这是Nodejs的最大特性--非阻塞! 查询数据操作作为比较消耗资 ...