import os import sys import time import psutil # 定义状态 NORMAL = 'NORMAL' ABNORMAL = 'ABNORMAL' # 定义状态持续时间阈值(秒) NORMAL_THRESHOLD = 10 * 60 ABNORMAL_THRESHOLD = 30 def get_process(name="mysqld"): for proc in psutil.process_iter(): if proc.name() == name: return proc return None # 定义状态机类 class ProcessMonitorStateMachine: def __init__(self, process_name): self.process_name = process_name self.state = NORMAL self.last_state_change_time = time.time() def check_process(self): """检查进程是否存在,并返回其状态""" process = get_process(name=self.process_name) if process: return NORMAL else: return ABNORMAL def process_event(self): """处理事件,根据事件类型切换状态""" current_time = time.time() process_state = self.check_process() print(f"当前状态:{process_state} {current_time}") if process_state != self.state: self.state = process_state self.last_state_change_time = current_time print(f"状态变更为: {self.state}") if self.state == ABNORMAL: self.handle_abnormal_timeout() else: if self.state == NORMAL and (current_time - self.last_state_change_time) > NORMAL_THRESHOLD: self.handle_normal_timeout() self.last_state_change_time = current_time elif self.state == ABNORMAL and (current_time - self.last_state_change_time) > ABNORMAL_THRESHOLD: self.handle_abnormal_timeout() self.last_state_change_time = current_time def handle_normal_timeout(self): """处理正常状态超时的指令""" print("程序已正常,退出监控") sys.exit(0) def handle_abnormal_timeout(self): """处理异常状态超时的指令""" print("异常状态持续时间过长,执行特定指令。") os.system("/usr/bin/mysqld_bootstrap") # 使用状态机监控进程 def main(): process_name = "mysqld" # 指定要监控的进程名称 monitor = ProcessMonitorStateMachine(process_name) print("start...") # 模拟定时检查进程状态 while True: monitor.process_event() time.sleep(10) # 每10秒检查一次 if __name__ == '__main__': main()