气流为什么调度程序无法启动我的DAG?

jac*_*ack 6 airflow

我有以下Dag: 在此输入图像描述

第一个Dag 0 1 * * *跑了没有任何问题.结束DAG 0 10 1 * * 没有运行.当我做:

import datetime
print datetime.datetime.now()
Run Code Online (Sandbox Code Playgroud)

我明白了:

2018-07-01 12:14:15.632812
Run Code Online (Sandbox Code Playgroud)

所以我不明白为什么没有安排这个DAG.我知道在10:00准确运行不是强制性的,但统计数据应该是Running.

根据"最新运行"的第一个任务是2018-06-30 01:00我怀疑我实际上并不了解Airflow时钟.从我的观点来看,最后一次运行是2018-07-01 01:00因为它今天早上而不是昨天运行.

编辑: 我在documntation看到了这一段:

"请注意,如果您在一天的schedule_interval上运行DAG,则2016-01-01的运行标记将在2016-01-01T23:59之后很快触发.换句话说,作业实例将在其涵盖的时间段内启动结束了."

所以我想知道..我应该在我想要的实际日期前一天安排一切?所以,如果我真的想要运行一些东西,0 10 1 * *我应该安排它 0 10 30 * *?换句话说,如果我想在每个月的第一天10点运行一些东西,我应该把它安排到每个月的最后一天10点?

那逻辑在哪里?这很难理解和遵循.

它变得最糟糕,根据这个没有办法告诉调度程序这个输入.我是什么做的?!

Vir*_*ekh 11

气流计划任务在计划间隔的END处运行.这可能有点直观,但是基于这样的想法,即在该间隔结束之前,特定间隔的数据不可用.

假设您有一个应该每天运行的工作流程.在那天(今天)结束之前,你无法获得昨天的所有数据.

在你的情况下,第一个DAG的最后一次运行是昨天,因为那是与该DagRun相关的"execution_date" - 你的DAG今天运行昨天的数据是有道理的.

如果你希望你的DAG在每个月的1号运行,那么改变时间表并不是一个坏主意.但是,如果您希望DAG针对每月1日关联的数据运行(即将该日期传递给API请求或SQL查询),那么您就是正确的.

  • 因此,如果您将`start_date`设置为6月下旬并且将间隔设置为每月运行,那么它将在7月的第一天运行,就像间隔(每月,从6月开始)将结束一样. (4认同)
  • 我认为这对他们来说不是一个好的决定。应该由开发人员牢记这一点,并且 start_date 应该与 start_date 值在同一天启动 DAG。他们正在增加隐藏的复杂性。 (3认同)
  • @jack我认为您误会了“时间表间隔”,如果您的开始日期是`2018-06-01`并且您的时间表间隔是`0 10 1 * *`然后在`2018-07-01 T 00:10: 00`您对`2018-06-01 T 00:10:00`的执行将开始运行。https://crontab.guru/#0_10_1_*_* (2认同)