""" 멀티프로세스 방식 - 텔레그램 봇 프로세스 트레이딩 봇과 완전히 분리된 독립 프로세스로 실행 """ import os import sys import multiprocessing from dotenv import load_dotenv # 환경 변수 로드 load_dotenv() def run_telegram_bot_standalone(): """텔레그램 봇만 독립적으로 실행""" # 경로 문제 해결을 위해 상위 디렉토리 추가 sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), '../../../'))) from modules.services.telegram_bot.server import TelegramBotServer from modules.utils.ipc import BotIPC from modules.config import Config token = os.getenv("TELEGRAM_BOT_TOKEN") if not token: print("❌ [Telegram] TELEGRAM_BOT_TOKEN not found in .env") sys.exit(1) print(f"🤖 [Telegram Bot Process] Starting... (PID: {os.getpid()})") print(f"🔗 [Telegram Bot] Standalone Process Mode (IPC Enabled)") # IPC 초기화 ipc = BotIPC() # [최적화] 재시작 루프 구현 while True: try: # 봇 서버 생성 (매번 새로 생성) bot_server = TelegramBotServer(token) # IPC를 통해 메인 봇 데이터 가져오기 try: # 초기 연결 시도 instance_data = ipc.get_bot_instance_data() if instance_data: bot_server.set_bot_instance(instance_data) except Exception: pass # 연결 실패해도 일단 봇은 띄움 # 봇 실행 (블로킹) bot_server.run() # 재시작 요청 확인 if bot_server.should_restart: print("🔄 [Telegram Bot] Restarting instance...") import time time.sleep(1) # 잠시 대기 continue else: print("🛑 [Telegram Bot] Process exiting.") break except KeyboardInterrupt: print("\n🛑 [Telegram Bot] Stopped by user") break except Exception as e: if "Conflict" not in str(e): print(f"❌ [Telegram Bot] Error: {e}") import traceback traceback.print_exc() break if __name__ == "__main__": multiprocessing.freeze_support() run_telegram_bot_standalone()