Airflow 如何正确工作气流计划\u间隔
我想尝试使用气流而不是Cron。 但时间间隔并不像我预期的那样有效 我编写的python代码如下所示。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
据我所知,气流应该在“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之后触发此运行,这是从执行日期开始的完整时间间隔已过的时间。这至少需要对其进行一点解释,以使其成为一个有用的答案。