Files
ai-trade/modules/services/telegram_bot/runner.py

74 lines
2.4 KiB
Python

"""
멀티프로세스 방식 - 텔레그램 봇 프로세스
트레이딩 봇과 완전히 분리된 독립 프로세스로 실행
"""
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()