From 92b97624fd730231abd423d097d89c11af76c7d7 Mon Sep 17 00:00:00 2001 From: dsyoon Date: Sun, 17 Aug 2025 11:16:49 +0900 Subject: [PATCH] init --- monitor.py | 1 - monitor_processor.py | 56 ++++++++++++++++++++++++++++++++++++++++++++ requirements.txt | 3 ++- 3 files changed, 58 insertions(+), 2 deletions(-) create mode 100644 monitor_processor.py diff --git a/monitor.py b/monitor.py index 1f1b34b..9ae7893 100644 --- a/monitor.py +++ b/monitor.py @@ -9,7 +9,6 @@ import requests import json import asyncio from multiprocessing import Pool -import schedule from config import * import FinanceDataReader as fdr import numpy as np diff --git a/monitor_processor.py b/monitor_processor.py new file mode 100644 index 0000000..f205e32 --- /dev/null +++ b/monitor_processor.py @@ -0,0 +1,56 @@ +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)) + else: + print(f"[OK] {script} is running.") + time.sleep(interval) + +if __name__ == "__main__": + monitor = ProcessMonitor() + + # 모니터링할 스크립트 목록 + scripts = [ + r"C:\workspace\AssetMonitor\monitor_coin_1.py", + r"C:\workspace\AssetMonitor\monitor_coin_2.py", + r"C:\workspace\AssetMonitor\monitor_coin_3.py", + r"C:\workspace\AssetMonitor\monitor_coin_4.py" + ] + monitor.monitor(scripts, interval=60) \ No newline at end of file diff --git a/requirements.txt b/requirements.txt index eee5c45..8bc85de 100644 --- a/requirements.txt +++ b/requirements.txt @@ -8,4 +8,5 @@ pycurl schedule python-dateutil python-telegram-bot -finance-datareader \ No newline at end of file +finance-datareader +psutil \ No newline at end of file