猿问

气流 cron 计划间隔未触发 DAG

注意: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 间隔之后执行吗?


叮当猫咪
浏览 167回答 1
1回答

呼啦一阵风

编辑:您在 18 日没有看到运行执行的原因是您有 catchup=False如果回填天数已经过去,这将导致 DAG 跳过回填天数。如果您想看到 DAG 填充第 17 个和第 24 个,您需要设置catchup=True气流的DAG执行在END中的计划间隔,因此,如果您的开始日期是当前周一,你的时间间隔为周一,DAG将不执行这个周一的继续运行,直到下一个星期一。这里的主要思想是当前星期一运行的数据现在可用,直到该间隔期结束。这让你从日常工作的角度考虑它更有意义。如果您正在运行的作业正在寻找今天的数据,那么该数据集要到今天结束才能完成。因此,如果您想运行今天的数据,则需要明天执行您的工作。这只是 Airflow 所采用的惯例,无论您喜欢与否。如果您想调整日期,您可以使用{{ macros.ds_add( ds, 7) }}将执行日期移动 7 天。让我知道这个答案是否有意义。如果没有,我将对其进行扩展。这个约定是我们在为 Airflow 作业开发时不得不处理的最烦人的细节。
随时随地看视频慕课网APP

相关分类

Python
我要回答