74 lines
2.4 KiB
Python
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()
|