【问题标题】:Airflow scheduled dag_run time changes if DAG is run manuallly如果手动运行 DAG,气流计划的 dag_run 时间会更改
【发布时间】:2022-08-18 03:23:34
【问题描述】:

我正在使用从官方 docker 镜像和 Postgres 数据库构建的 Airflow 2.2.5。假设我有一个 DAG 设置为每天凌晨 2 点运行。只要我只打开它让它运行,该过程就可以正常运行,并且 DAG 每天凌晨 2 点按预期运行,但如果由于某种原因我需要手动运行,比如上午 11 点,现在在第二天(以及以下所有)DAG 将在上午 11 点自动运行,而不是编程的凌晨 2 点。

我尝试使用 cron 表达式而不是 datetime.timedelta 来代替 schedule_interval,即使在 UI 中看起来 DAG 将在凌晨 2 点运行(尽管手动运行在上午 11 点),但 DAG 实际上只在上午 11 点运行,与用户界面指示。

正如其他人注意到这种行为?我能做些什么来防止手动运行干扰预定的运行吗?

谢谢

  • 请提供足够的代码,以便其他人可以更好地理解或重现该问题。

标签: python airflow airflow-scheduler


【解决方案1】:

Airflow 是一个数据流工具,每次运行都会为您提供一些上下文变量,以便在您的处理中使用它们:

  • data_interval_start:这是您将处理的数据中的第一个日期,它等于上一个运行结束日期
  • data_interval_end:这是您将处理的数据中的最后一个日期

因此,如果您使用这些变量来过滤您要处理的数据,您不能仅仅为了运行手动运行而更改 schedule_interval,因为如果您使用 0 11,12 * * *,例如,您将每天运行两次:

  • 第一个带有data_interval_start=12h00 of the previous daydata_interval_end=11h00 of the current day(23 小时)
  • 一小时后的第二个,data_interval_start=11h00 of the current daydata_interval_end=12h00 of the current day(1 小时)

但是如果你有一个在每次运行时使用完整数据的 dag,或者一个在不使用任何数据的情况下执行某些任务的 dag,你可以通过不同的方式手动触发它:

  • UI:点击dag页面底部Trigger DAG
  • CLI:使用命令airflow dags trigger <dag_id> (doc)
  • API:POST api/v1/dags/{dag_id}/dagRuns(doc)
  • Airflow plugins:创建一个 FlaskAppBuilder 表单以使用 python 方法创建运行(复杂,您只能将其用于某些用例)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多