You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Airflow Scheduler调度延迟一周 DAG每周一调度不触发如何解决

问题根因

这两个问题的核心根因都是Airflow特有的调度逻辑和常规crontab定时逻辑的差异:

  • Airflow的DAG运行实例的execution_date对应调度周期的起始时间,实例的实际触发时间是该调度周期完全结束之后。你配置的schedule_interval='0 8 * * 1'为周粒度调度,意味着execution_date为某周周一的实例,会在下周周一的8点才会被自动触发。
  • 两个问题的具体对应逻辑:
    1. 从未自动触发:通常是DAG配置的start_date距离当前时间不足一个完整调度周期。比如你将start_date设为2021-10-11(周一),那么第一次自动触发的时间点是2021-10-18 8点,在这个时间点之前不会有自动运行的实例。如果你的start_date设置的更早且开启了catchup=True,还会因为历史实例积压阻塞新的调度。
    2. 手动触发默认执行上周任务:手动触发DAG时,Airflow默认会填充最近一个未完成调度的execution_date,这个日期是对应周期的起始时间,自然会显示为上周周一的日期,你2021年10月21日手动触发时看到的9月11日实例,本质是中间积压的未调度历史实例。
修复方案
  • 调整start_date配置:使用固定的过去时间作为start_date,不要使用动态的当前时间。比如你希望第一次实际运行时间为10月25日(周一)8点,就将start_date设为datetime(2021, 10, 18, 8, 0, tzinfo=你的时区),时区要和调度时间的时区保持一致,避免时区偏移导致的调度异常。
  • 关闭历史补跑:在DAG参数中添加catchup=False,禁止Airflow调度start_date到当前时间之间所有缺失的历史实例,避免实例积压。
  • 手动触发时自定义日期:如果需要手动触发对应时间的任务,不要使用默认填充的execution_date,手动指定你需要的日期即可。
  • 适配调度逻辑(可选):如果你需要execution_date和实际运行时间保持一致,可以使用Airflow 2.3+版本提供的自定义Timetable功能调整调度规则,或者调整schedule_interval的配置适配你的使用习惯。

内容的提问来源于stack exchange,提问作者Peterson Davis

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.29 06:45:05