import time import psutil import subprocess import telegram import asyncio from config import * class ProcessMonitor: def __init__(self, python_executable="python"): self.python = python_executable # 실행된 프로세스 저장용 self.process_map = {} def is_running(self, script_path): """해당 스크립트가 실행 중인지 확인""" for proc in psutil.process_iter(['pid', 'name', 'cmdline']): try: if proc.info['cmdline'] and script_path in proc.info['cmdline']: return True except (psutil.NoSuchProcess, psutil.AccessDenied): continue return False def start_process(self, script_path): """해당 스크립트 실행""" print(f"[INFO] Starting {script_path}") process = subprocess.Popen([self.python, script_path], creationflags=subprocess.CREATE_NEW_CONSOLE) self.process_map[script_path] = process def sendMsg(self, text): coin_client = telegram.Bot(token=COIN_TELEGRAM_BOT_TOKEN) asyncio.run(coin_client.send_message(chat_id=COIN_TELEGRAM_CHAT_ID, text=text)) return def monitor(self, scripts, interval=60): """1분 단위로 프로세스 상태 확인 및 관리""" while True: for script in scripts: if not self.is_running(script): self.sendMsg("🔔{} process is killed.".format(script)) time.sleep(interval) if __name__ == "__main__": monitor = ProcessMonitor() # 모니터링할 스크립트 목록 scripts = [ r"C:\workspace\AssetMonitor\monitor_coin_1h_1.py", r"C:\workspace\AssetMonitor\monitor_coin_1h_2.py" ] monitor.monitor(scripts, interval=60)