用python写了个简单的监控进程的脚本,当发现进程消失的时候,立即调用服务,开启服务。

脚本的工作原理是这样的:脚本读取配置文件,读取预先配置好的调用系统服务的路径和所要监控的服务在进程管理器中的进程名,之所以要用配置文件,是为了方便给需要的朋友,你只需要修改进程名和系统路径,源代码就不需要修改了。具体的看代码中的注释吧。下面的是配置文件 config.ini

  1. [MonitorProgramPath]
  2. ProgramPath: D:\Program Files (x86)\Tencent\WeChat\WeChat.exe
  3.  
  4. [MonitorProcessName]
  5. ProcessName: WeChat.exe

上面可以根据你的需求配置不同的路径和进程名,我是需要监控 WeChat.exe 这个程序,那就配置好他的调用的系统路径和他在任务管理器里面的进程名。

下面来看看代码:

  1. # -*- encoding: utf-8 -*-
  2. import psutil
  3. import os
  4. import time
  5. from configparser import ConfigParser
  6.  
  7. CONFIGFILE = 'config.ini'
  8. config = ConfigParser()
  9. config.read(CONFIGFILE)
  10. ProgramPath = config.get('MonitorProgramPath', 'ProgramPath')
  11. ProcessName = config.get('MonitorProcessName', 'ProcessName')
  12. # 读取配置文件中的进程名和系统路径,这2个参数都可以在配置文件中修改
  13. ProList = []
  14. # 定义一个列表
  15. pids = psutil.pids()
  16.  
  17. def main():
  18. for pid in pids:
  19. ProList.append(str(psutil.Process(pid).name()))
  20. # 把所有任务管理器中的进程名添加到列表
  21. if ProcessName in ProList:
  22. # 判断进程名是否在列表中,如果是True,则所监控的服务正在 运行状态,
  23. # 打印服务正常运行
  24. print('')
  25. print("Server is running...")
  26. print('')
  27. else:
  28. # 如果进程名不在列表中,即监控的服务挂了,则在log文件下记录日志
  29. # 日志文件名是以年月日为文件名
  30.  
  31. print("Server is not running...")
  32. # f = open('.\\log\\' + time.strftime("%Y%m%d", time.localtime()) + '-exception.txt', 'a')
  33. f = open('log.txt', 'a')
  34. print('Server is not running,Begining to Restart Server...')
  35. # 打印服务状态
  36. f.write('\n' + 'Server is not running,Begining to Restart Server...' + '\n')
  37. f.write(time.strftime('%Y-%m-%d %H:%M:%S --%A--%c', time.localtime()) + '\n')
  38. # 写入时间和服务状态到日志文件中
  39. os.startfile(ProgramPath)
  40. # 调用服务重启
  41. f.write('Restart Server Success...' + '\n')
  42. f.write(time.strftime('%Y-%m-%d %H:%M:%S --%A--%c', time.localtime()))
  43. f.close()
  44. # 关闭文件
  45. print('Restart Server Success...')
  46. print(time.strftime('%Y-%m-%d %H:%M:%S --%A--%c', time.localtime()))
  47. del ProList[:]
  48.  
  49. # 清空列表,否则列表会不停的添加进程名,会占用系统资源
  50.  
  51. if __name__ == "__main__":
  52. while True:
  53. main()
  54. time.sleep(10)
  55. # 每隔10秒调用脚本看下服务是否正常,如果不正常则重启服务,如果正常,则打印服务正常

执行后,控制台返回如下信息:

因为没有打开WeChat程序,脚本每隔10s试图启动该进程,脚本正常工作。

打开log.txt,显示如下内容:

  1. Server is not running,Begining to Restart Server...
  2. -- :: --Friday--Fri Jun ::
  3. Restart Server Success...
  4. -- :: --Friday--Fri Jun ::
  5. Server is not running,Begining to Restart Server...
  6. -- :: --Friday--Fri Jun ::
  7. Restart Server Success...
  8. -- :: --Friday--Fri Jun ::
  9. Server is not running,Begining to Restart Server...
  10. -- :: --Friday--Fri Jun ::
  11. Restart Server Success...
  12. -- :: --Friday--Fri Jun ::

Python测试进阶——(3)编写Python程序监控计算机的服务是否正常运行的更多相关文章

  1. 从零使用Python测试。Testing Using Python.

    0. 写在前面 本人使用Python测试已有多年,略有些皮毛经验.每次有新员工入职,都会从头教一遍如何入门上手使用Python进行测试.趁这段有空,整理成文档,也好方便后续新员工学习.文章如有不妥之处 ...

  2. 【python测试开发栈】python基础语法大盘点

    周边很多同学在用python,但是偶尔会发现有人对python的基础语法还不是特别了解,所以帮大家梳理了python的基础语法(文中的介绍以python3为例).如果你已然是python大牛,可以跳过 ...

  3. 【python测试开发栈】python内存管理机制(一)—引用计数

    什么是内存 在开始进入正题之前,我们先来回忆下,计算机基础原理的知识,为什么需要内存.我们都知道计算机的CPU相当于人类的大脑,其运算速度非常的快,而我们平时写的数据,比如:文档.代码等都是存储在磁盘 ...

  4. 【python测试开发栈】—python内存管理机制(二)—垃圾回收

    在上一篇文章中(python 内存管理机制-引用计数)中,我们介绍了python内存管理机制中的引用计数,python正是通过它来有效的管理内存.今天来介绍python的垃圾回收,其主要策略是引用计数 ...

  5. Python测试进阶——(5)Python程序监控指定进程的CPU和内存利用率

    用Python写了个简单的监控进程的脚本monitor190620.py,记录进程的CPU利用率和内存利用率到文件pid.csv中,分析进程运行数据用图表展示. 脚本的工作原理是这样的:脚本读取配置文 ...

  6. Python测试进阶——(4)Python程序监控、存储、分析并可视化CPU和内存利用率

    monitor190617.py 监控cpu和内存利用率信息,组织成json格式,并写入到 record.txt 文件中: import psutil import time import json ...

  7. Python测试进阶——(7)动手编写Bash脚本启动Python监控程序并传递PID

    如下: #./cf_workload_functions.sh function timestamp(){ # get current timestamp sec=`date +%s` nanosec ...

  8. Python测试进阶——(1)安装Python测试相关模块

    安装python 安装pip yum -y install epel-release yum -y install python-pip 安装psutil 参考:https://www.cnblogs ...

  9. Python测试进阶——(6)Bash脚本启动Python监控程序并传递PID

    用HiBench执行Hadoop——Sort测试用例,进入 /HiBench-master/bin/workloads/micro/sort/hadoop 目录下,执行命令: [root@node1 ...

随机推荐

  1. 修改Linux的默认编码

    Windows的默认编码为GBK,Linux的默认编码为UTF-8.在Windows下编辑的中文,在Linux下显示为乱码.为了解决此问题,修改Linux的默认编码为GBK.方法如下: 方法1: vi ...

  2. 【JavaWeb】导入Excel并进行校验

    一.需要实现的目标 1.界面编写 2.导入表读取表名,进行校验,后台匹配(判断此表的名称是否能够模糊匹配上) 3.确定表存在,读取其中的数据,暂存 4.正则表达式数据校验(判断是否已存在,数据是否符合 ...

  3. MySQL 之数据库初识

    一 数据库概述 数据库即存放数据的仓库,只不过这个仓库是在计算机存储设备上,而且数据是按一定的格式存放的.过去人们将数据存放在文件柜里,现在数据量庞大,已经不再适用. 数据库是长期存放在计算机内.有组 ...

  4. java8新特性1:lambda表达式和函数式接口

    1.lambda的介绍: 1.1.为什么java语言需要引入lambda表达式? java语言诞生于1995年,历史时间已经相对较长了.在其后的各种新型编程语言中,都有着lambda表达式的内容,并且 ...

  5. Pytorch-Faster-RCNN 中的 MAP 实现 (解析imdb.py 和 pascal_voc.py)

    ---恢复内容开始--- MAP是衡量object dectection算法的重要criteria,然而一直没有仔细阅读相关代码,今天就好好看一下: 1. 测试test过程是由FRCN/tools/t ...

  6. ScrollView不设置contentSize属性依然也可以作为底层滚动View(使用masonry设置scrollView的contentSize)

    第一步 //下层的scroolView self.baseScrollView = [[UIScrollView alloc] init]; self.baseScrollView.delegate ...

  7. 让 el-dialog 居中,并且内容多的时候内部可以滚动

    .el-dialog { position: absolute; top: 50%; left: 50%; margin: 0 !important; transform: translate(-50 ...

  8. 穿越雷区--蓝桥杯--DFS/BFS

    题目描述 X星的坦克战车很奇怪,它必须交替地穿越正能量辐射区和负能量辐射区才能保持正常运转,否则将报废. 某坦克需要从A区到B区去(A,B区本身是安全区,没有正能量或负能量特征),怎样走才能路径最短? ...

  9. c++11的记录

    decltype()类型指示符 设定一个返回值是int的函数f(),通过使用 decltype(f()) sum = x; 此时decltype()接受一个从f()返回的int型的值,并将sum设置为 ...

  10. springboot不能加载主类

    参考:https://www.cnblogs.com/iyyy/p/8085719.html 若为maven项目:用maven更新下项目.