Airflow 如何正确工作气流计划\u间隔

Airflow 如何正确工作气流计划\u间隔,airflow,Airflow,我想尝试使用气流而不是Cron。 但时间间隔并不像我预期的那样有效 我编写的python代码如下所示。 据我所知,气流应该在“2016/03/30 8:15:00”运行,但在那个时候不起作用 如果我像这样修改它“'schedule\u interval':timedelta(minutes=5)”,我认为它工作正常 “notice_slack.sh”只是对我的通道调用slack api # -*- coding: utf-8 -*- from __future__ import absolute

我想尝试使用气流而不是Cron。 但时间间隔并不像我预期的那样有效

我编写的python代码如下所示。
据我所知,气流应该在“2016/03/30 8:15:00”运行,但在那个时候不起作用

如果我像这样修改它“'schedule\u interval':timedelta(minutes=5)”,我认为它工作正常

“notice_slack.sh”只是对我的通道调用slack api

# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
import os
from airflow.operators import BashOperator
from airflow.models import DAG
from datetime import datetime, timedelta

args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime(2016, 3, 29, 8, 15),
}

dag = DAG(
    dag_id='notice_slack',
    default_args=args,
    schedule_interval="@daily",
    dagrun_timeout=timedelta(minutes=1))

# cmd file name
CMD = '/tmp/notice_slack.sh'

run_this = BashOperator(
    task_id='run_transport', bash_command=CMD, dag=dag)
我想在每天的特定时间运行一些脚本,就像这个cron设置一样

15 08 * * * bash /tmp/notice_slack.sh
我已经阅读了文档,我知道它与cron有点不同。
因此,我尝试安排“开始日期”和“计划间隔”设置

有人知道我该怎么做吗

气流版本

信息-使用executor LocalExecutor

v1.7.0

亚马逊linux ami/2015.09-release-notes

试试这个:

# -*- coding: utf-8 -*-
from __future__ import absolute_import, unicode_literals
import os
from airflow.operators import BashOperator
from airflow.models import DAG
from datetime import datetime, timedelta

args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'start_date': datetime(2016, 3, 29),
}

dag = DAG(
    dag_id='notice_slack',
    default_args=args,
    schedule_interval="15 08 * * *",
    dagrun_timeout=timedelta(minutes=1))

# cmd file name
CMD = 'bash /tmp/notice_slack.sh'

run_this = BashOperator(
    task_id='run_transport', bash_command=CMD, dag=dag)
开始日期
(datetime)–任务的开始日期决定第一个任务实例的执行日期。最佳做法是将开始日期四舍五入到DAG的计划间隔

schedule\u interval
(datetime.timedelta或dateutil.relativedelta.relativedelta或充当cron表达式的str)–定义DAG运行的频率,将此timedelta对象添加到最新任务实例的执行日期,以确定下一个计划


只要将
schedule\u interval
bash\u命令配置为与cron设置相同即可。

当2016/03/30 8:15:00+计划间隔(每日)结束时,气流将启动DAG。因此,您的DAG将在2016/03/31 8:15:00运行


您可以使用您给出的示例检查,
@daily
将在午夜过后运行作业。您可以尝试将其更改为
timedelta(days=1)
,该值与包含08:15的固定
start\u日期相对应。
或者您可以对
计划使用cron规范\u interval='15 08***'
,在这种情况下,您希望第一次运行的前一天8:15之前的任何开始日期都可以工作


请注意,
依赖于过去:False
已经是默认值,您可能已经将其行为与DAG参数中的
catchup=False
混淆,这将避免在从开始日期到现在DAG计划间隔将运行的时间段内进行过去的运行。

如果您不确定如何创建airflow cron表达式,可以尝试使用。

首先,您的开始日期应在过去- 代替“开始日期”:日期时间(2016,3,29,8,15)
你会否尝试一下“开始日期”:日期时间(2016年2月29日8月15日)

并应用“catchup”:False以防止反作用-除非这是您想要做的事情

来自气流文件- 气流计划程序在开始日期+计划间隔过后立即触发任务

计划间隔可以作为cron提供- 如果你想每天早上8:15运行它,表达式应该是-*'15 8**'

如果您只想在10月31日上午8:15运行它,那么表达式将是-*'15 8 31 10'

为了提供这一点,请在您的Dag属性中添加“schedule\u inteval”:“15 8***'

你可以从中了解更多

此外,还有气流预设-

如果其中任何一项满足您的要求,那么它将是简单的,
“时间表”:“@hourly”

最后,您还可以将时间表作为python timedelta对象应用,例如,12 PM


'schedule\u interval':timedelta(小时=12)

@daily
0***
的快捷方式,如果我正确阅读文档,这意味着它将在午夜运行;对吗?@dlamblin你的假设是正确的。第一个0表示一天中的第0分钟。第二个0表示一天中的第0个小时。这个答案是不正确的
start_date
参数只是DAG运行开始后的日期时间。但实际计划包含参数
schedule\u interval
@daily
值表示DAG必须在午夜运行。每天08:15运行:
schedule\u interval='15 08***'
。值得注意的是,
执行日期将是刚刚结束的时间间隔的开始。因此,通过此设置,第一次运行的日期将为计划的
dag\u运行中的
2016 03 29T08:15:00.000
,这是传入的
执行日期,但它将在
2016 03 30T08:15:00之后触发此运行,这是从
执行日期开始的完整时间间隔已过的时间。这至少需要对其进行一点解释,以使其成为一个有用的答案。