为什么 dag 在 Airflow 中运行 dagrun 时多运行一次?
Why dag runs more once when dagruns in Airflow?
这是我的代码:
default_args = {
'owner': 'airflow',
'depends_on_past': True,
'start_date': datetime(2018,9,9),
'email': ['airflow@example.com'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=5)
}
dag = DAG('hello', catchup=False, default_args=default_args, schedule_interval=timedelta(minutes=1))
而任务实例列表是这样的:
您可以看到我从 08:36:24 开始,我知道它将在 08:35:20 执行任务,因为我将 schedule_interval 设置为 1 分钟。但是为什么它在08:34:20执行了任务?
最右边一列显示的是实际执行相应任务的时间,但并没有告诉我们您实际启用DAG的时间。我怀疑您在 08:35 时启用了 DAG,调度程序选择了 DAG 并为 8:34 安排了第一个 DAG 运行。当调度程序完成所有设置工作并执行第一个 DAG 运行 时,它已经 8:36.
一分钟的间隔太短了(或者你太慢了;))。尝试 10 分钟的间隔并在 DAG 处于 8:33 时启用它(因此不在调度间隔边界,例如 8:30 或 8:40),您将看到一切如您所愿。
这是我的代码:
default_args = {
'owner': 'airflow',
'depends_on_past': True,
'start_date': datetime(2018,9,9),
'email': ['airflow@example.com'],
'email_on_failure': False,
'email_on_retry': False,
'retries': 1,
'retry_delay': timedelta(minutes=5)
}
dag = DAG('hello', catchup=False, default_args=default_args, schedule_interval=timedelta(minutes=1))
而任务实例列表是这样的:
您可以看到我从 08:36:24 开始,我知道它将在 08:35:20 执行任务,因为我将 schedule_interval 设置为 1 分钟。但是为什么它在08:34:20执行了任务?
最右边一列显示的是实际执行相应任务的时间,但并没有告诉我们您实际启用DAG的时间。我怀疑您在 08:35 时启用了 DAG,调度程序选择了 DAG 并为 8:34 安排了第一个 DAG 运行。当调度程序完成所有设置工作并执行第一个 DAG 运行 时,它已经 8:36.
一分钟的间隔太短了(或者你太慢了;))。尝试 10 分钟的间隔并在 DAG 处于 8:33 时启用它(因此不在调度间隔边界,例如 8:30 或 8:40),您将看到一切如您所愿。