用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程序监控计算机的服务是否正常运行的更多相关文章

  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. 通过view获取所在的viewController对象

    建议写成UIView的分类,如下: .h - (UIViewController *)viewController; .m - (UIViewController *)viewController { ...

  2. 9 HTML DOM事件监听&版本兼容&元素(节点)增删改查

    事件监听: 语法:element.addEventListener(event, function, useCapture); event:事件的类型,触发什么事件,注意不需要on作为前缀,比如cli ...

  3. Python数据类型-8 集合set

    集合set set集合是一个无序不重复元素的集,基本功能包括关系测试和消除重复元素.集合使用大括号({})框定元素,并以逗号进行分隔.但是注意:如果要创建一个空集合,必须用 set() 而不是 {} ...

  4. 3_07_MSSQL课程_Ado.Net_委托、事件

    委托和事件的区别? (1)委托是一个类. 事件是一个委托类型的实列. (2)委托可以在定义委托实列的类的外部触发执行.(不安全) 事件只能能在定义它的类的内部触发执行.(安全),类外部只能注册事件的响 ...

  5. 在webView中的返回键

    在写webView中我们按一下返回键,退到上一个我们浏览的网页,到第一个页面时,按两下退出程序,且按一下时提示你在按一下退出程序 只要加上这个方法即可 public void onBackPresse ...

  6. rails work

    4.2 Say "Hello", Rails problem weppack not install solve run the command rails webpacker:i ...

  7. 树莓派4B踩坑指南 - (3)无显示器连接

    无显示器连接 WiFi:如果是原装系统,直接修改wpa_supplicant.conf文件后,放入boot即可(一定注意ssid名称不要写错!!惨痛教训T^T) SSH:在boot盘下新建一个 SSH ...

  8. CSP2019 Emiya 家今天的饭

    Description: 有 \(n\) 中烹饪方法和 \(m\) 种食材,要求: 至少做一种菜 所有菜的烹饪方法各不相同 同种食材的菜的数量不能超过总菜数的一半 求做菜的方案数. Solution1 ...

  9. ardrino#串口控制led

    void setup() { pinMode(D6, OUTPUT); digitalWrite(D6,HIGH); Serial.begin(); } void loop() { String st ...

  10. sqlalchemy 连接mysql8.0报 RuntimeError: cryptograpy si requeired for sha256_password 错误

    cryptography is required for sha256_password or caching_sha2_password 需要cryptography模块的支持才能连接需要sha25 ...