贴一篇PYTHON进程守护的脚本

发布于 2023-05-08  546 次阅读


废话

  • 学校的服务器跑了点小玩意,莫名奇妙会自动关,于是搞了个脚本,改了一下,可以实现python监控进程是否存在,若不存在则重启,并且记录到日志.然后日志功能莫名其妙出问题,又拿ggboy改了一下,勉强能用🐶
  • 后来想想,这玩意一点用都没有,因为我进程守护的脚本的进程也会消失,搞线程,进程互启麻烦死.最简单应该是注册个系统服务吧,但是为啥不直接把要守护的程序注册成系统服务呢🤣

脚本

import signal
import psutil
import os
import time
import datetime

# 定义日志文件名
LOG_FILE = "log.txt"

# 定义需要守护的进程名
PROCESS_NAME = "xxx.exe"

# 定义处理SIGTERM信号的函数
def handle_sigterm(signum, frame):
    # 执行清理操作
    print("Received SIGTERM signal. Cleaning up...")
    f.close()
    sys.exit(0)

# 注册SIGTERM信号处理函数
signal.signal(signal.SIGTERM, handle_sigterm)

# 主循环
while True:
    try:
        # 获取当前时间
        a = datetime.datetime.now().strftime("%Y-%m-%d %H:%M:%S")

        # 检查进程是否存在
        pl = psutil.pids()
        if any(psutil.Process(pid).name() == PROCESS_NAME for pid in pl):
            print(f"{a} {PROCESS_NAME} alive")
            with open(LOG_FILE, "a") as f:
                f.write(f"{a} {PROCESS_NAME} alive\n")
        else:
            print(f"{a} {PROCESS_NAME} shutdown")
            with open(LOG_FILE, "a") as f:
                f.write(f"{a} {PROCESS_NAME} shutdown\n")
            # 启动进程
            subprocess.Popen(["C:\\xxx.exe"])

        # 等待一段时间
        time.sleep(10)

    except Exception as e:
        # 记录异常信息
        with open(LOG_FILE, "a") as f:
            f.write(f"{datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')} Exception: {e}\n")
届ける言葉を今は育ててる
最后更新于 2024-02-11