• 设为首页
  • 收藏本站
  • 积分充值
  • VIP赞助
  • 手机版
  • 微博
  • 微信
    微信公众号 添加方式:
    1:搜索微信号(888888
    2:扫描左侧二维码
  • 快捷导航
    福建二哥 门户 查看主题

    python监控windows服务器的进程和服务

    发布者: 山止川行 | 发布时间: 2025-6-14 12:19| 查看数: 125| 评论数: 0|帖子模式

    需求:软件公司提供的软件服务在服务器上会莫名其妙的挂掉,他们采用的方法也只有重启服务器,重启时间太久了,所以想弄一个监测进程和服务的程序,监测到挂了就重启进程或者服务
    1. import psutil  
    2. import time
    3. import subprocess
    4. import logging
    5. import logging.handlers
    6. import wmi
    7. import ctypes
    8. import os

    9. # 获取服务状态
    10. def get_service_status(service_names):
    11.     wmiobj = wmi.WMI()
    12.     for service_name in service_names:
    13.         services = wmiobj.Win32_Service(Name = service_name)
    14.         if services:
    15.             # 服务状态是停止就开启服务
    16.             if services[0].state == "Stopped":
    17.                 start_service(service_name)
    18.             # return services[0].state
    19.         else:
    20.             logging.error(f"失败:服务{service_name}不存在")

    21. #判断是否有管理员权限
    22. def is_admin():
    23.     try:
    24.         return ctypes.windll.shell32.IsUserAnAdmin()
    25.     except:
    26.         return False

    27. # 启动服务
    28. def start_service(service_name):
    29.     if is_admin():
    30.         try:
    31.             cmd = 'NET START {}'.format(service_name)
    32.             os.popen(cmd)
    33.             logging.warning(f"成功:启动了服务{service_name}")
    34.         except Exception as e:
    35.                 logging.error(f"失败:启动服务{service_name}失败, 错误信息: {e}")
    36.     else:
    37.         logging.warning(f"不是admin权限")

    38. # 日志配置
    39. def loggingstars():
    40.     logger = logging.getLogger()
    41.     logger.setLevel(logging.DEBUG)

    42.     handler = logging.StreamHandler()
    43.     logger.addHandler(handler)

    44.     file_handler = logging.handlers.RotatingFileHandler(filename='process_name.log', maxBytes=1024*1024*90, backupCount=10)
    45.     file_handler.setLevel(logging.WARNING)

    46.     formatter = logging.Formatter('%(asctime)s - %(levelname)s - %(message)s')
    47.     file_handler.setFormatter(formatter)

    48.     logger.addHandler(file_handler)


    49. # 获取掉线的进程完整执行路径
    50. def find_process_by_name(process_names):
    51.     all__process = set()
    52.     """获取所有进程的完成路径"""  
    53.     for proc in psutil.process_iter(['pid', 'name','exe']):
    54.         all__process.add(proc.info['exe'])
    55.     """ 找出掉线的监控进程的完整路径 """
    56.     new_list = [item for item in process_names if item not in all__process]
    57.     return new_list


    58. def start_process(process_names, service_anmes):
    59.     while True:
    60.         # 检查服务是否启动
    61.         get_service_status(service_anmes)
    62.         time.sleep(60)

    63.         stop_process = find_process_by_name(process_names)
    64.         
    65.         if not stop_process:
    66.             continue
    67.         """ 启动掉线的进程 """
    68.         for app in stop_process:
    69.             try:
    70.                 subprocess.Popen(f"{app}")
    71.                 logging.warning(f"成功:启动了进程{app}")
    72.             except Exception as e:
    73.                 logging.error(f"失败:启动进程{app}失败, 错误信息: {e}")
    74.         # 如果需要启动进程的话,暂停20分钟
    75.         time.sleep(20*60)
    76.   
    77. if __name__ == "__main__":

    78.     loggingstars()

    79.     logging.warning("============== 进程监控程序启动 ============")

    80.     # 需要监测的进程,为什么使用可执行文件,是因为发现有进程名会相同
    81.     process_names = [
    82.         "C:\\UserApp\\app\\baidu-translate-client\\百度翻译.exe",
    83.         "C:\\UserApp\\app\\dingding\\main\\current\\DingTalk.exe"
    84.     ]

    85.    # 需要监测的服务名
    86.     service_anmes = ["MySQL80", "JetBrainsEtwHost"]
    87.     start_process(process_names, service_anmes)
    复制代码
    其实服务也是启动执行文件然后有一个进程,如果找到所有服务的进程直接写进程监控就可以了,这里只是展示一下怎么监控服务和进程
    有些服务或者进程的启动可能有顺序

    • 打开 运行 输入 “msinfo32”
    • 选择 “软件环境” 再点击 "正在运行任务"就可疑查看启动时间
    打包就用 Pyinstaller -F xx.py,然后放到服务器上
    到此这篇关于python监控windows服务器的进程和服务的文章就介绍到这了,更多相关python监控服务器进程和服务内容请搜索脚本之家以前的文章或继续浏览下面的相关文章希望大家以后多多支持脚本之家!

    来源:https://www.jb51.net/python/3400524z2.htm
    免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!

    最新评论

    QQ Archiver 手机版 小黑屋 福建二哥 ( 闽ICP备2022004717号|闽公网安备35052402000345号 )

    Powered by Discuz! X3.5 © 2001-2023

    快速回复 返回顶部 返回列表