Airflow快速入门:CLI执行任务报错DagRunNotFound
问题原因分析
airflow tasks run命令要求第三个参数(execution_date)必须对应一个已存在的DagRun实例,而非任意指定的日期。你指定的2015-01-01对应的DagRun并未被创建,因此触发DagRunNotFound错误:
- 示例DAG的调度器默认不会为过旧的历史日期自动生成DagRun(即使
start_date早于该日期,standalone模式下调度器通常只处理近期的调度周期); - Web UI执行成功是因为UI触发操作会自动创建新的DagRun(run_id格式为
manual__xxxx),而CLI的tasks run不会自动创建DagRun。
解决方案
方案1:手动创建指定execution_date的DagRun后执行任务
- 先为目标日期创建DagRun:
airflow dags trigger example_bash_operator --execution-date 2015-01-01 - 再执行任务命令:
airflow tasks run example_bash_operator runme_0 2015-01-01
方案2:通过run_id绑定手动触发的DagRun执行任务
如果你不需要指定历史日期,可以直接触发新DagRun并使用其run_id执行任务:
- 触发DagRun并获取run_id(需安装
jq工具,或从Web UI的DAG运行记录中复制):airflow dags trigger example_bash_operator --output json | jq -r '.run_id' - 替换run_id执行任务:
airflow tasks run example_bash_operator runme_0 --run-id manual__2024-05-20T12:34:56+00:00
方案3:开启DAG的catchup自动生成历史DagRun
修改example_bash_operator的DAG定义,确保catchup=True,然后重启Airflow调度器:
with DAG( 'example_bash_operator', start_date=datetime(2015, 1, 1), catchup=True, # 确保开启自动补跑 # 其他配置... ): # 任务定义...
等待调度器生成2015-01-01对应的DagRun后,再执行airflow tasks run命令。
排查验证步骤
- 执行
airflow dags list确认example_bash_operator已被加载; - 执行
airflow dags list-runs example_bash_operator查看已存在的DagRun,确认目标日期的实例是否存在。
内容的提问来源于stack exchange,提问作者Jason
相关产品推荐
相关产品推荐

