废话
- 学校的服务器跑了点小玩意,莫名奇妙会自动关,于是搞了个脚本,改了一下,可以实现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")