|
|
@@ -45,7 +45,10 @@ def create_scheduler() -> BackgroundScheduler:
|
|
|
|
|
|
def _log_next_runs(scheduler: BaseScheduler) -> None:
|
|
|
for job in scheduler.get_jobs():
|
|
|
- logger.info(" - %s | next run: %s", job.name, job.next_run_time)
|
|
|
+ # apscheduler 3.x: 在 scheduler.start() 之前,Job.next_run_time 访问会抛 AttributeError
|
|
|
+ # 这里用 getattr 兜底,保证启动阶段不因日志而中断。
|
|
|
+ next_run_time = getattr(job, "next_run_time", None)
|
|
|
+ logger.info(" - %s | next run: %s", job.name, next_run_time)
|
|
|
|
|
|
|
|
|
def start_scheduler() -> BackgroundScheduler | None:
|
|
|
@@ -62,8 +65,8 @@ def start_scheduler() -> BackgroundScheduler | None:
|
|
|
|
|
|
_scheduler = create_scheduler()
|
|
|
logger.info("Starting scheduler...")
|
|
|
- _log_next_runs(_scheduler)
|
|
|
_scheduler.start()
|
|
|
+ _log_next_runs(_scheduler)
|
|
|
return _scheduler
|
|
|
|
|
|
|
|
|
@@ -88,7 +91,7 @@ def get_scheduler_status() -> dict:
|
|
|
|
|
|
jobs = []
|
|
|
for job in _scheduler.get_jobs():
|
|
|
- next_run = job.next_run_time
|
|
|
+ next_run = getattr(job, "next_run_time", None)
|
|
|
jobs.append(
|
|
|
{
|
|
|
"id": job.id,
|