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

配置为每3天运行的Airflow DAG未按预期触发是什么原因?

配置错误原因
  • cron表达式语义理解偏差
    你使用的0 15 */3 * * cron表达式中,日期位的*/3代表每月所有能被3整除的日期(1、4、7...24、27、30)的15点执行,而非从start_date开始向后每隔3天执行。按该规则,你设置的起始时间为2021年5月24日,下一个符合规则的时间点是2021年5月27日15:00,和你预期的2021年5月28日不符。
  • Airflow调度逻辑不匹配
    Airflow采用「调度周期结束后触发」的规则:对应某个execution_date的DAG实例,会在所属调度周期完全结束后才会触发执行。比如你设置的间隔为3天,execution_date为2021-05-24 15:00的任务,实际触发时间为2021-05-27 15:00,若你排查问题时时间还早于该节点,自然看不到触发记录。
  • 参数配置冲突
    你设置了depends_on_past=True,该参数要求当前任务必须等待上一个同DAG的调度实例运行成功才能启动。同时你配置了catchup=False,不会自动补跑start_date到当前时间之间的所有历史调度实例,首次运行没有历史成功实例作为依赖,也会导致任务无法触发。
修复方案

如果你需要实现的是从start_date开始每隔3天15点执行,而非固定每月被3整除的日期执行,优先使用Airflow的时间间隔对象配置调度规则,修改后的参考代码如下:

from datetime import datetime, timedelta

default_args = {
    'owner': 'akash',
    'depends_on_past': False, # 首次运行建议关闭,若无需依赖历史运行结果可长期保持关闭
    'start_date': datetime(2021, 5, 24),
    'retries': 1,
}

dag = DAG(
    dag_id='au_welcome_bonus_promotion', 
    default_args=default_args, 
    catchup=False, 
    # 时间间隔配置,实现从start_date开始每隔72小时触发一次
    schedule_interval = timedelta(days=3)
)

如果你需要保留cron写法、接受每月固定能被3整除的日期执行的逻辑,只需将depends_on_past改为False即可正常触发首次运行,后续如果需要依赖历史运行结果再改回True即可。

内容的提问来源于stack exchange,提问作者Muddassir Rahman

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.10.18 08:36:05