修改Airflow DAG的end_date后未触发新DagRun,如何解决?
解决Airflow月度DAG更新end_date后不触发新DagRun的问题
这种情况在Airflow里挺常见的——当你扩展了end_date但调度器没自动生成新的DagRun,核心原因是调度器已经完成了原时间范围的调度计算,不会主动重新扫描扩展后的时间区间。不用改DAG ID也能解决,给你几个靠谱的方案:
方案1:手动触发目标月份的DagRun
这是最直接且安全的方法,毕竟你只需要补跑一个月:
- 通过UI操作:进入你的DAG详情页,点击右上角的「Trigger DAG w/ config」,在弹出的窗口里,把
execution_date设置为2018-04-01(因为@monthly调度的DagRun,execution_date对应要处理的月份第一天,2018年5月运行的任务对应的就是2018-04-01这个execution_date),然后点击触发即可。 - 通过CLI命令:如果习惯用命令行,Airflow 2.x可以执行:
旧版本(1.x)命令是:airflow dags trigger --execution-date 2018-04-01 your_dag_idairflow trigger_dag -e 2018-04-01 your_dag_id
方案2:让调度器自动补跑
如果希望调度器自己生成这个DagRun,可以试试这几步:
- 确保你的DAG的
catchup参数设置为True(如果之前是False的话)。这个参数控制调度器是否补跑时间范围内缺失的DagRun,开启后调度器会重新计算新的end_date对应的未生成的运行。 - 重启Airflow调度器服务,或者在UI的DAG列表页勾选你的DAG,点击「Refresh DAGs」按钮,强制调度器重新读取DAG配置。
- 等几分钟,调度器应该会自动生成
execution_date=2018-04-01的DagRun并执行。完成后你可以把catchup改回False,避免后续意外补跑。
方案3:检查元数据缓存(进阶操作)
如果上面的方法都没生效,可能是Airflow元数据库里的缓存信息影响了调度:
- 可以登录Airflow的元数据库(比如PostgreSQL或MySQL),查看
dag_run表,确认是否已经存在execution_date='2018-04-01'的记录。如果没有,说明调度器确实没生成,这时候再用方案1或2重试。 - 不推荐新手直接修改元数据库记录,容易破坏数据一致性,优先用前面的方法。
内容的提问来源于stack exchange,提问作者Ben Rudolph
相关产品推荐
相关产品推荐

