Airflow dag 中的 Catchup 标志无法正常工作

Catchup flag in in Airflow dag is not working properly

步数(今天是 2020 年 1 月 7 日):

1) 将以下 dag 放入 Airflow 目录:

from datetime import datetime
from airflow import DAG
from airflow.operators.bash_operator import BashOperator

dag = DAG(dag_id='example_dag', start_date=datetime(2020, 1, 1), catchup=False)

t1 = BashOperator(task_id='bash_task', bash_command='echo Hola!', dag=dag)

请注意阻止 Airflow 在过期日期安排的赶上标志。

2) 启动一个新的 Airflow 实例

3) 在 UI

中打开 dag

4) 执行:

我真的不明白,如果我使用赶上标志并在 1 月 7 日部署,为什么这些过期日期(1 月 5 日和 1 月 6 日)的 dag 会被安排和执行。有什么建议吗?谢谢!

更新:没有赶上标志我得到:

所以:

1) 正在考虑追赶标志

2) 它似乎有错误或配置不当,因为当它设置为 False 时,Airflow 仍在过期日期(1 月 5 日和 1 月 6 日)安排。

就像我在 , Airflow Scheduler creates a DAG Run for the most current instance of the DAG interval series when catchup=False but there was a bug 中提到的(当为 schedule_interval 使用 timedelta 对象时)创建了 2 个 DagRun。

对于你的情况,你没有将 schedule_interval 字段传递给你的 DAG,因为它采用默认值。默认值为 timedelta(days=1) (https://github.com/apache/airflow/blob/3ad4f96bae78f16a2240567f65831ca269672d7b/airflow/models/dag.py#L212),这就是创建 2 个 DagRun 的原因。

这将在 Airflow 1.10.11 中修复,并已通过 this PR 为 Master 修复。