注意:crontab.guru 链接已损坏,因此我将它们封装在代码块中。我有一个 DAG,将在太平洋时间星期一午夜 8 点(UTC 时间)执行 1 分钟以避免任何重叠问题。原本计划的间隔为1 8 */1 * 1它根据https://crontab.guru/#1_8_*/1_*_1“每天的日08:01在UTC(美国东部时间03:01,00:01 PST),如果它是在星期一”是。然而,这导致 DAG 在每天 08:01 UTC 触发;星期一的条件似乎被忽略了。计划间隔已更新为更简单的1 8 * * 1,根据https://crontab.guru/#1_8_*_*_1“星期一 UTC 时间 08:01(美国东部标准时间 03:01,太平洋标准时间 00:01)”。这阻止了 DAG 每天执行,但它没有在 2019 年 2 月 18 日,即更新后的第一个星期一触发。我已经阅读了一些其他帖子,表明开始日期可能会导致此问题,但此任务的开始日期是datetime(2019, 2, 11, 0, 0, 0, 0, pytz.UTC),这是 2019-02-18 运行日期之前的两个间隔。这是完整的 DAG/任务定义(没有导入或特定名称):dag = DAG( dag_id="dag", description="dag", # At 08:01 UTC (03:01 EST, 00:01 PST) on Monday # (https://crontab.guru/#1_8_*_*_1) schedule_interval="1 8 * * 1", catchup=False,)task = PythonOperator( task_id="handle", provide_context=True, python_callable=handle, dag=dag, retries=2, retry_delay=timedelta(minutes=15), start_date=datetime(2019, 2, 11, 0, 0, 0, 0, pytz.UTC),)知道为什么这不会在 2019-02-18 00:01 UTC 间隔之后执行吗?
1 回答
![?](http://img1.sycdn.imooc.com/545862120001766302200220-100-100.jpg)
呼啦一阵风
TA贡献1802条经验 获得超6个赞
编辑:您在 18 日没有看到运行执行的原因是您有 catchup=False
如果回填天数已经过去,这将导致 DAG 跳过回填天数。如果您想看到 DAG 填充第 17 个和第 24 个,您需要设置catchup=True
气流的DAG执行在END中的计划间隔,因此,如果您的开始日期是当前周一,你的时间间隔为周一,DAG将不执行这个周一的继续运行,直到下一个星期一。
这里的主要思想是当前星期一运行的数据现在可用,直到该间隔期结束。这让你从日常工作的角度考虑它更有意义。如果您正在运行的作业正在寻找今天的数据,那么该数据集要到今天结束才能完成。因此,如果您想运行今天的数据,则需要明天执行您的工作。这只是 Airflow 所采用的惯例,无论您喜欢与否。
如果您想调整日期,您可以使用{{ macros.ds_add( ds, 7) }}
将执行日期移动 7 天。
让我知道这个答案是否有意义。如果没有,我将对其进行扩展。这个约定是我们在为 Airflow 作业开发时不得不处理的最烦人的细节。
添加回答
举报
0/150
提交
取消