如何在 Apache Airflow 运行 中制作一个像简单的 cron 作业一样的 DAG?

How to make a DAG in Apache Airflow run like a simple cron job?

Airflow 调度器在过去几天让我有点摸不着头脑,因为它甚至在 catchup=False 之后回填 dag 运行s。 我的时区感知 dag 的开始日期为 13-04-2021 19:30 PST14-04-2021 2:30 UTC 并且具有以下配置:

# define DAG and its parameters
dag = DAG(
    'backup_dag',
    default_args=default_args,
    start_date=pendulum.datetime(2021, 4, 13, 19, 30, tz='US/Pacific'),  # set start_date in US/Pacific (PST) timezone
    description='A data backup pipeline',
    schedule_interval="30 19 * * *",  # 7:30 PM every day
    catchup=False,
    is_paused_upon_creation=False
)

这个 dag 运行s 在边缘设备上,该边缘设备有时打开有时关闭。我希望这个 dag 基本上将其 运行 安排在 19:30 PST2:30 UTC,只要边缘设备打开,否则不要。奇怪的是,当我将带有 dag 的容器部署到边缘设备时,dag 会在计划间隔之外自动启动它的第一个 运行,即使该间隔已经过去!

我在这里错过了什么?我无法理解为什么调度程序会这样做

以下是我阅读所有文档后的理解,如有错误请指正。

DAG 由调度程序在 2021-04-19T011:30:00+00:00 UTC 拾取,理想情况下它应该 运行 在 2021-04-20T02:30:00+00:00 UTC 根据 dag 配置。以下所有时间均为 UTC

      Dag Start_date         1st run(skip catchup=false)   2nd run(skip catchup=false)    3rd run(skip catchup=false)   4th run(skip catchup=false)
2021-04-14T02:30:00+00:00 ---> 2021-04-15T02:30:00+00:00 ---> 2021-04-16T02:30:00+00:00  ---> 2021-04-17T02:30:00+00:00 ---> 2021-04-18T02:30:00+00:00 ---> 

5th run(skip catchup=false)   6th run(should execute)              
 2021-04-19T02:30:00+00:00 ---> 2021-04-20T02:30:00+00:00

那么,为什么第 5 个 运行 发生在间隔 2021-04-18T02:30:00+00:002021-04-19T02:30:00+00:00 之间,即使间隔已经过去?

我希望 DAG 仅在其间隔到来时 运行。

这是预期的气流行为:

turn catchup off. [...] When turned off, the scheduler creates a DAG run only for the latest interval.

Catchup section 中的相应示例与您的类似,并更详细地解释了行为。

我能想到的一个肮脏的解决方法是设置 schedule_interval=None 并使用 CLI 从 cron 实际触发 DAG。