jihuaqiang 9 часов назад
Родитель
Сommit
fac88dff69
1 измененных файлов с 15 добавлено и 3 удалено
  1. 15 3
      examples/content_finder/server.py

+ 15 - 3
examples/content_finder/server.py

@@ -21,6 +21,7 @@ sys.path.insert(0, str(Path(__file__).parent.parent.parent))
 from fastapi import FastAPI, HTTPException
 from pydantic import BaseModel
 from apscheduler.schedulers.asyncio import AsyncIOScheduler
+from zoneinfo import ZoneInfo
 from dotenv import load_dotenv
 
 load_dotenv()
@@ -50,8 +51,9 @@ app = FastAPI(
     description="抖音内容寻找 Agent 服务"
 )
 
-# 定时调度器
-scheduler = AsyncIOScheduler()
+# 定时调度器(默认用中国时区,避免容器 UTC 导致错过预期时间点)
+SCHEDULER_TIMEZONE = os.getenv("SCHEDULER_TIMEZONE", os.getenv("TZ", "Asia/Shanghai"))
+scheduler = AsyncIOScheduler(timezone=ZoneInfo(SCHEDULER_TIMEZONE))
 
 # 并发控制
 MAX_CONCURRENT_TASKS = int(os.getenv("MAX_CONCURRENT_TASKS", "1"))
@@ -347,10 +349,20 @@ async def startup():
     logger.info("=" * 60)
     logger.info("内容寻找服务启动中...")
     logger.info(f"最大并发任务数: {MAX_CONCURRENT_TASKS}")
+    logger.info(f"定时器时区: {SCHEDULER_TIMEZONE}")
 
     # 配置定时任务:每天上午 6 点触发一次
-    scheduler.add_job(scheduled_task, "cron", hour="22", minute="13")
+    job = scheduler.add_job(
+        scheduled_task,
+        "cron",
+        hour="22",
+        minute="22",
+        second="0",
+        misfire_grace_time=300,
+        coalesce=True,
+    )
     scheduler.start()
+    logger.info(f"定时任务已注册: id={job.id}, next_run_time={job.next_run_time}")
     # asyncio.create_task(scheduled_task())
     # logger.info("定时任务已启动:启动后立即执行一次,之后每 10 分钟执行(从数据库获取待处理需求)")