Airflow - 防止DAG在部署/取消暂停后立即运行

7
似乎之前已经有关于这个问题的讨论。

如何在我取消暂停时阻止Airflow第一次运行任务?

https://groups.google.com/g/cloud-composer-discuss/c/JGtmAd7xcsM?pli=1

当我部署一个DAG在特定时间运行(比如每天早上9点),Airflow会立即在部署时运行该DAG。
dag = DAG(
'My Dag',
default_args=default_args,
schedule_interval='00 09 * * *',
start_date = datetime(2021, 1, 1),
catchup=False # dont run previous and backfill; run only latest
)

这是因为使用catchup=False时,调度器会根据文档中的指示“仅为最新的时间间隔创建DAG运行”。

https://airflow.apache.org/docs/apache-airflow/stable/dag-run.html

我想要实现的是,即使最新的间隔时间到了,我也不希望DAG运行开始。我希望在下一次时钟敲响9点之前什么都不会发生。
似乎Airflow没有原生解决这个问题的方法。
人们一直在使用什么样的解决方法?也许像检查当前时间是否接近下一个执行日期这样的方法?
2个回答

3

当你更新dag时,可以将 start_date 设置为下一天。但是,如果您暂停/恢复dag,则它将不起作用。

注意建议使用静态值(避免使用 datetime.now() 或类似的动态值),因此对于每次部署,您需要指定一个新值,例如 datetime(2021, 10, 15)datetime(2021, 10, 16),... 这可能会使部署更加困难。


1
我认为这样做是可行的。但是我一直在阅读到不推荐将start_date设置为动态的,比如在https://marclamberti.com/blog/apache-airflow-best-practices-1/中。 - user3240688

1
  1. 在dag暂停的情况下:创建dag运行 http.://.../dagrun/add,并将Execution Date设置为所需跳过的日期。这样可以在UI中访问任务实例。
  2. 在UI中标记成功这些任务实例
  3. 恢复dag的运行

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接