python監(jiān)控windows服務(wù)器的進(jìn)程和服務(wù)
需求:軟件公司提供的軟件服務(wù)在服務(wù)器上會(huì)莫名其妙的掛掉,他們采用的方法也只有重啟服務(wù)器,重啟時(shí)間太久了,所以想弄一個(gè)監(jiān)測(cè)進(jìn)程和服務(wù)的程序,監(jiān)測(cè)到掛了就重啟進(jìn)程或者服務(wù)
import psutil import time import subprocess import logging import logging.handlers import wmi import ctypes import os # 獲取服務(wù)狀態(tài) def get_service_status(service_names): wmiobj = wmi.WMI() for service_name in service_names: services = wmiobj.Win32_Service(Name = service_name) if services: # 服務(wù)狀態(tài)是停止就開啟服務(wù) if services[0].state == "Stopped": start_service(service_name) # return services[0].state else: logging.error(f"失?。悍?wù){(diào)service_name}不存在") #判斷是否有管理員權(quán)限 def is_admin(): try: return ctypes.windll.shell32.IsUserAnAdmin() except: return False # 啟動(dòng)服務(wù) def start_service(service_name): if is_admin(): try: cmd = 'NET START {}'.format(service_name) os.popen(cmd) logging.warning(f"成功:?jiǎn)?dòng)了服務(wù){(diào)service_name}") except Exception as e: logging.error(f"失敗:?jiǎn)?dòng)服務(wù){(diào)service_name}失敗, 錯(cuò)誤信息: {e}") else: logging.warning(f"不是admin權(quán)限") # 日志配置 def loggingstars(): logger = logging.getLogger() logger.setLevel(logging.DEBUG) handler = logging.StreamHandler() logger.addHandler(handler) file_handler = logging.handlers.RotatingFileHandler(filename='process_name.log', maxBytes=1024*1024*90, backupCount=10) file_handler.setLevel(logging.WARNING) formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s') file_handler.setFormatter(formatter) logger.addHandler(file_handler) # 獲取掉線的進(jìn)程完整執(zhí)行路徑 def find_process_by_name(process_names): all__process = set() """獲取所有進(jìn)程的完成路徑""" for proc in psutil.process_iter(['pid', 'name','exe']): all__process.add(proc.info['exe']) """ 找出掉線的監(jiān)控進(jìn)程的完整路徑 """ new_list = [item for item in process_names if item not in all__process] return new_list def start_process(process_names, service_anmes): while True: # 檢查服務(wù)是否啟動(dòng) get_service_status(service_anmes) time.sleep(60) stop_process = find_process_by_name(process_names) if not stop_process: continue """ 啟動(dòng)掉線的進(jìn)程 """ for app in stop_process: try: subprocess.Popen(f"{app}") logging.warning(f"成功:?jiǎn)?dòng)了進(jìn)程{app}") except Exception as e: logging.error(f"失?。?jiǎn)?dòng)進(jìn)程{app}失敗, 錯(cuò)誤信息: {e}") # 如果需要啟動(dòng)進(jìn)程的話,暫停20分鐘 time.sleep(20*60) if __name__ == "__main__": loggingstars() logging.warning("============== 進(jìn)程監(jiān)控程序啟動(dòng) ============") # 需要監(jiān)測(cè)的進(jìn)程,為什么使用可執(zhí)行文件,是因?yàn)榘l(fā)現(xiàn)有進(jìn)程名會(huì)相同 process_names = [ "C:\\UserApp\\app\\baidu-translate-client\\百度翻譯.exe", "C:\\UserApp\\app\\dingding\\main\\current\\DingTalk.exe" ] # 需要監(jiān)測(cè)的服務(wù)名 service_anmes = ["MySQL80", "JetBrainsEtwHost"] start_process(process_names, service_anmes)
其實(shí)服務(wù)也是啟動(dòng)執(zhí)行文件然后有一個(gè)進(jìn)程,如果找到所有服務(wù)的進(jìn)程直接寫進(jìn)程監(jiān)控就可以了,這里只是展示一下怎么監(jiān)控服務(wù)和進(jìn)程
有些服務(wù)或者進(jìn)程的啟動(dòng)可能有順序
- 打開 運(yùn)行 輸入 “msinfo32”
- 選擇 “軟件環(huán)境” 再點(diǎn)擊 "正在運(yùn)行任務(wù)"就可疑查看啟動(dòng)時(shí)間
打包就用 Pyinstaller -F xx.py,然后放到服務(wù)器上
到此這篇關(guān)于python監(jiān)控windows服務(wù)器的進(jìn)程和服務(wù)的文章就介紹到這了,更多相關(guān)python監(jiān)控服務(wù)器進(jìn)程和服務(wù)內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- 用python監(jiān)控服務(wù)器的cpu,磁盤空間,內(nèi)存,超過郵件報(bào)警
- Python監(jiān)控服務(wù)器實(shí)用工具psutil使用解析
- 基于python3監(jiān)控服務(wù)器狀態(tài)進(jìn)行郵件報(bào)警
- 詳解用Python實(shí)現(xiàn)自動(dòng)化監(jiān)控遠(yuǎn)程服務(wù)器
- 使用python進(jìn)行服務(wù)器的監(jiān)控
- python3實(shí)現(xiàn)windows下同名進(jìn)程監(jiān)控
- 代碼講解Python對(duì)Windows服務(wù)進(jìn)行監(jiān)控
相關(guān)文章
Python實(shí)現(xiàn)提取JSON數(shù)據(jù)中的鍵值對(duì)并保存為.csv文件
這篇文章主要為大家詳細(xì)介紹了如何基于Python實(shí)現(xiàn)讀取JSON文件數(shù)據(jù),并將JSON文件中指定的鍵值對(duì)數(shù)據(jù)轉(zhuǎn)換為.csv格式文件,感興趣的小伙伴可以了解下2023-09-09如何通過python實(shí)現(xiàn)人臉識(shí)別驗(yàn)證
這篇文章主要介紹了如何通過python實(shí)現(xiàn)人臉識(shí)別驗(yàn)證,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-01-01Pycharm github配置實(shí)現(xiàn)過程圖解
這篇文章主要介紹了Pycharm github配置實(shí)現(xiàn)過程圖解,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-10-10Python3.5實(shí)現(xiàn)的三級(jí)菜單功能示例
這篇文章主要介紹了Python3.5實(shí)現(xiàn)的三級(jí)菜單功能,涉及Python針對(duì)json格式數(shù)據(jù)的讀取、遍歷、查找、判斷等相關(guān)操作技巧,需要的朋友可以參考下2019-03-03python3實(shí)現(xiàn)抓取網(wǎng)頁資源的 N 種方法
這兩天學(xué)習(xí)了python3實(shí)現(xiàn)抓取網(wǎng)頁資源的方法,發(fā)現(xiàn)了很多種方法,所以,今天添加一點(diǎn)小筆記。2017-05-05詳解Python 實(shí)現(xiàn)元胞自動(dòng)機(jī)中的生命游戲(Game of life)
本篇文章主要介紹了詳解Python 實(shí)現(xiàn)元胞自動(dòng)機(jī)中的生命游戲(Game of life),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-01