""" 스케줄러 엔트리포인트 APScheduler를 사용하여 jobs/ 에 등록된 잡들을 주기적으로 실행합니다. """ import asyncio import logging from apscheduler.schedulers.asyncio import AsyncIOScheduler from config import settings from jobs import JOBS logging.basicConfig( level=logging.INFO, format="[%(asctime)s] [%(levelname)s] %(name)s - %(message)s", datefmt="%Y-%m-%d %H:%M:%S", ) logger = logging.getLogger(__name__) async def main() -> None: scheduler = AsyncIOScheduler() for job in JOBS: interval = job.interval_minutes or settings.CHECK_INTERVAL_MINUTES scheduler.add_job( job.run, trigger="interval", minutes=interval, id=job.name, name=job.name, max_instances=1, ) logger.info(f"[SCHEDULER] 잡 등록 - '{job.name}' (주기: {interval}분)") scheduler.start() logger.info(f"[SCHEDULER] 시작 - 백엔드: {settings.BACKEND_INTERNAL_URL}") # 시작 시 모든 잡 즉시 1회 실행 await asyncio.gather(*[job.run() for job in JOBS]) try: await asyncio.Event().wait() except (KeyboardInterrupt, SystemExit): logger.info("[SCHEDULER] 종료 중...") scheduler.shutdown() if __name__ == "__main__": asyncio.run(main())