init
This commit is contained in:
@@ -9,7 +9,6 @@ import requests
|
|||||||
import json
|
import json
|
||||||
import asyncio
|
import asyncio
|
||||||
from multiprocessing import Pool
|
from multiprocessing import Pool
|
||||||
import schedule
|
|
||||||
from config import *
|
from config import *
|
||||||
import FinanceDataReader as fdr
|
import FinanceDataReader as fdr
|
||||||
import numpy as np
|
import numpy as np
|
||||||
|
|||||||
56
monitor_processor.py
Normal file
56
monitor_processor.py
Normal file
@@ -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)
|
||||||
@@ -8,4 +8,5 @@ pycurl
|
|||||||
schedule
|
schedule
|
||||||
python-dateutil
|
python-dateutil
|
||||||
python-telegram-bot
|
python-telegram-bot
|
||||||
finance-datareader
|
finance-datareader
|
||||||
|
psutil
|
||||||
Reference in New Issue
Block a user