如何安排有任务的任务

问题描述 投票:0回答:1

不幸的是,即使阅读了此处的许多问题以及气流网站的FAQ页面,我仍然不了解气流如何安排任务。我在这里有一个非常简单的示例任务:

from airflow import DAG
from airflow.operators.bash_operator import BashOperator
from datetime import datetime, timedelta

default_args = {
    "depends_on_past": False,
    "start_date": datetime(2020, 5, 29),
    "email_on_failure": False,
    "email_on_retry": False,
    "retries": 1,
    "retry_delay": timedelta(minutes=5),
}

dag = DAG(
    "example_dag_one",
    schedule_interval="30 8 * * *",
    catchup=False,
    default_args=default_args,
)

with dag:

    t1 = BashOperator(task_id="print_hello", bash_command="echo hello", dag=dag)

    t1

我的观点是,此任务将于5月29日08:30运行。但是随着时间的流逝,气流并未安排该任务。如果我将cron表达式更改为:'* 8 * * *',它将每分钟安排一次任务。

但是,当我使用相同的DAG且起始日期为昨天(在这种情况下,即5月28日)时,任务将排定为08:30,但它的执行日期为28(即使它在5月29日运行),并且网络用户界面的开始日期是5月29日。这非常令人困惑。

最终我希望从气流中得到的结果很简单:“这里是python代码,请在这个时候运行它”。那么我怎么能做到这一点。再说一次,我想安排从明天开始的每天08:30进行任务。

airflow airflow-scheduler
1个回答
0
投票

答案可以在Airflow官方文档中找到:

[请注意,如果您以一天的schedule_interval运行DAG,则在2016-01-01T23:59之后不久将触发标记为2016-01-01的运行。换句话说,作业实例所涵盖的时间段结束后,便会启动它。

让我们重复一下调度程序会在开始日期之后的那个周期结束后一个schedule_interval运行您的作业。

因此,根据您的情况,如果您将开始日期定为5月29日,并且使用原始cron,它将从5月30日明天开始每天在08:30运行。

[无论如何,如果您在一天中的某个特定时间不需要特别的限制,您可以将计划间隔设置为'@daily',它将在每天的开始(00:00)触发。如果@daily有很多问题,不用担心,调度程序和工作人员将知道如何处理它以执行所有命令。如果您有依赖于其他dag的dag,则可以使用一些机制将它们串联起来,这样您就不必担心指定小时数。

© www.soinside.com 2019 - 2024. All rights reserved.