如何设置无延迟定时调度 实现DAG每月首日准时执行
月度首日DAG调度延迟解决方案
触发延迟根因
你使用的0 10 1 * * Cron表达式本身逻辑无误,延迟是Airflow默认调度机制导致的:
Airflow的DAG Run只会在调度周期的结束时间点触发,如果你把DAG的start_date设置为2024-10-01 10:00,搭配月度调度规则,第一个调度周期的范围是2024-10-01 10:00 ~ 2024-11-01 10:00,对应任务就会到11月1日才会触发,也就是你遇到的延迟一个月的问题。
解决方案
方案1:调整start_date参数(推荐)
不需要修改现有Cron表达式,只需要把DAG的start_date设置为首次期望执行日期的前一个月同期时间即可:
比如你期望10月1日10点首次执行任务,就把start_date设置为固定值:start_date = datetime(2024, 9, 1, 10, 0)
注意:禁止给start_date设置
datetime.now()这类动态值,动态时间会导致调度周期计算持续异常,永远出现触发延迟。
方案2:补跑漏跑的历史任务
如果DAG已经上线,漏跑了10月1日的任务,可以临时把catchup参数设置为True,Airflow会自动补跑start_date到当前时间之间所有未触发的DAG Run,补跑完成后可根据需求关闭catchup避免意外补跑历史任务。
验证建议
调整配置后可以先把调度间隔临时修改为短周期(比如*/5 * * * *每5分钟触发一次),验证触发逻辑符合预期后再改回月度调度规则。
内容的提问来源于stack exchange,提问作者Guille
相关产品推荐
相关产品推荐

