【问题标题】:Airflow DAG does not run at specified time with catchup=False气流 DAG 未在 catchup=False 的指定时间运行
【发布时间】:2018-05-06 12:41:13
【问题描述】:

我有一个气流 DAG,回填它并没有什么意义。我发现使用airflow 1.8,你可以给DAG参数catchup=False,所以它只会开始最近的工作。 也就是说,我想让 DAG 在午夜开始并每天运行。 但。现在就是这样:DAG 立即开始,而不是在午夜。此外,当我清除所有 DAG 运行时,它将立即重新启动。然后 DAG 将每天运行,但将安排在错误的开始时间 + 1 天。

如何让 DAG 只开始运行最近的作业,并且在特定时间(午夜)开始?

这是我使用的代码:

from datetime import datetime, timedelta
from airflow import DAG
from airflow.operators.dummy_operator import DummyOperator

default_args = {'depends_on_past': False,
                'start_date': datetime(2013, 1, 1)}

with DAG('test_dag',
         default_args=default_args,
         schedule_interval=timedelta(days=1),
         catchup=False
         ) as dag:
    test = DummyOperator(task_id='test')

【问题讨论】:

    标签: airflow apache-airflow


    【解决方案1】:

    您可以将 crontab 放在 schedule_interval 中,更多细节可以在这里找到:https://airflow.apache.org/scheduler.html#dag-runs,例如schedule_interval="0 0 * * *"

    另外,Airflow 在 UTC 下运行,请将您的“午夜”调整到正确的时区。

    【讨论】:

    • 谢谢!我明白了,好吧。那么我也可以把schedule_interval = @daily 放在那里还是我总是必须在那里使用crontab?我仍然需要弄清楚UTC的事情。我仍然没有找到在气流中正确配置我的时区的位置......但我想现在将我的时区转换为 UTC 就足够了。
    • @jabberwocky, @daily 只是表达“0 0 * * *”的简单方式,如果您不住在UTC,则需要指定UTC下午夜的含义,例如,美国东部标准时间,我可以输入“0 5 * * *”,即午夜。
    • 仅供参考,有一个 pull request 正在审核以添加时区支持,所以它可能很快就会到来。
    • 嘿@Chengzhi,工作就像一个魅力。非常感谢!另外,我会注意PR。好像很快就准备好了!
    猜你喜欢
    • 2022-11-02
    • 2021-05-03
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-01-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多