准备工作
1.创建一个服务,服务名为:playgame
https://pypi.org/project/srvwrapper/
安装srvwrapper
pip install srvwrapper
准备一个死循环的代码 ---play_game.py,代码如下:
import time while True: print("你好")
文件路径:D:\test1\dingding\play_game.py
打开管理员DOS窗口,命令如下:
srvwrapper playgame python --arguments "\"D:\test1\dingding\play_game.py""
这样就创建好了一个playgame服务
删除服务命令
sc delete playgame
上代码
安装
pip install wmi
pip install pypiwin32
新建文件,dingding.py,代码如下:
import wmi import os import requests import json import time time_now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) monitor_name = {"playgame"} headers = {"Content-Type": "application/json; charset=utf-8"} url = "https://oapi.dingtalk.com/robot/..." # 钉钉机器人地址 monitor_map = { "playgame": "net start playgame" } while True: w1 = wmi.WMI() services = w1.Win32_Service() r = set()
# 遍历所有服务 for i in services: if i.State == "Running": r.add(i.Name) monitor_stop = monitor_name - r if monitor_stop: for s in monitor_stop: p_status = "停止" p_name = s data = { "msgtype": "markdown", "markdown": { "title": "监控讯息", "text": "%s \n" % time_now + ">#### 服务名:%s \n\n" % p_name + ">#### 状态:%s \n" % p_status + ">#### 正在尝试启动" }, } send_data = json.dumps(data).encode("utf-8") requests.post(url=url, data=send_data, headers=headers) # 执行系统命令 os.system(monitor_map[s]) w2 = wmi.WMI() s2 = w2.Win32_Service() running = set() for j in s2: if j.State == "Running": running.add(j.Name) if s in running: p_status = "正在运行" data = { "msgtype": "markdown", "markdown": { "title": "监控讯息", "text": "%s \n" % time_now + ">#### 服务名:%s \n\n" % p_name + ">#### 状态:%s \n" % p_status + ">#### 启动成功" }, } send_data = json.dumps(data).encode("utf-8") requests.post(url=url, data=send_data, headers=headers) else: p_status = "停止" data = { "msgtype": "markdown", "markdown": { "title": "监控讯息", "text": "%s \n" % time_now + ">#### 服务名:%s \n\n" % p_name + ">#### 状态:%s \n" % p_status + ">#### 启动失败" }, } send_data = json.dumps(data).encode("utf-8") requests.post(url=url, data=send_data, headers=headers)
注意:使用管理员来启动dingding.py脚本
下面代码是进程监控及自动开启
import psutil # mem = psutil.virtual_memory() # mem_dict = {} # mem_dict["内存总数"] = str(mem.total/1000000000) + 'G' # mem_dict["已使用内存"] = str(mem.used/1000000000) + 'G' # mem_dict["可用内存"] = str(mem.free/1000000000) + 'G' # mem_dict["占比"] = mem.percent import os import requests import json import time time_now = time.strftime("%Y-%m-%d %H:%M:%S", time.localtime(time.time())) monitor_name = {"ServiceWrapper.exe"} headers = {"Content-Type": "application/json; charset=utf-8"} url = "https://oapi.dingtalk.com/robot/send?access_token=d3d68aaab32efae5ea389949a9b604b080da0b265f5aacf4e0a82e8e97d557b6" monitor_map = { "ServiceWrapper.exe": "net start playgame" } while True: proc_dict = {} proc_name = set() # 获取所有进程 for p in psutil.process_iter(attrs=['pid', 'name']): proc_dict[p.info['pid']] = p.info['name'] proc_name.add(p.info['name']) proc_stop = monitor_name - proc_name if proc_stop: for p2 in proc_stop: p_status = "停止" p_name = p2 data = { "msgtype": "markdown", "markdown": { "title": "监控讯息", "text": "%s \n" % time_now + ">#### 服务名:%s \n\n" % p_name + ">#### 状态:%s \n" % p_status + ">#### 正在尝试启动" }, } send_data = json.dumps(data).encode("utf-8") requests.post(url=url, data=send_data, headers=headers) # 执行系统命令 os.system(monitor_map[p2]) proc_name = set() for p3 in psutil.process_iter(attrs=['pid', 'name']): proc_name.add(p3.info['name']) if p2 in proc_name: p_status = "启动" data = { "msgtype": "markdown", "markdown": { "title": "监控讯息", "text": "%s \n" % time_now + ">#### 服务名:%s \n\n" % p_name + ">#### 状态:%s \n" % p_status + ">#### 启动成功" }, } send_data = json.dumps(data).encode("utf-8") requests.post(url=url, data=send_data, headers=headers) else: p_status = "停止" data = { "msgtype": "markdown", "markdown": { "title": "监控讯息", "text": "%s \n" % time_now + ">#### 服务名:%s \n\n" % p_name + ">#### 状态:%s \n" % p_status + ">#### 启动失败" }, } send_data = json.dumps(data).encode("utf-8") requests.post(url=url, data=send_data, headers=headers) time.sleep(5)