Airflow 气流DAG计划延迟一天,但手动触发器不可用

Airflow 气流DAG计划延迟一天,但手动触发器不可用,airflow,airflow-scheduler,Airflow,Airflow Scheduler,我使用气流1.8.0 我有一个像这样的DAG: default_args = { 'owner': 'airflow', 'depends_on_past': False, 'email': ['technical@me.com'], 'start_date': datetime.datetime(2018, 5, 21), 'email_on_retry': False, 'retries': 0 } dag = DAG('my_dag',

我使用气流1.8.0 我有一个像这样的DAG:

default_args = {
    'owner': 'airflow',
    'depends_on_past': False,
    'email': ['technical@me.com'],
    'start_date': datetime.datetime(2018, 5, 21),
    'email_on_retry': False,
    'retries': 0
}


dag = DAG('my_dag',
          schedule_interval='40 20 * * *',
          catchup=True,
          default_args=default_args)
每天dag计划正确,但延迟一天

鉴于今天的日期是

2018-07-02

网络界面显示:

而不是2018-07-01

但如果我手动触发 当前日期已正确传递:


有没有办法强制计划程序按当前日期运行?

您的
计划时间间隔是
计划时间间隔=20 40***'
。请记住,
schedule\u interval
采用CRON格式,或(分时日(月)月日(周)。因此,您当前的计划实际上不正确,因为计划程序不能每40小时运行一次。是否要使其每20小时运行40分钟?如果是,请尝试
schedule\u interval='40 20***'


另外,如果您想让它在最近一天运行,请将
catchup
设置为
catchup=False
。有了这两个修复程序,它应该可以工作。有关更多帮助,请参阅此网站。

您的
计划时间间隔是
计划时间间隔=20 40***'
。请记住
计划时间间隔是CRON格式的,或者(分钟-小时-日(月)月-日(周)。因此,您当前的计划实际上不正确,因为计划程序无法每40小时运行一次。是否要使其每20小时在40分钟运行一次?如果是,请尝试
schedule\u interval='40 20***'


另外,如果您想让它在最近一天运行,请将
catchup
设置为
catchup=False
。有了这两个修复程序,它应该可以工作。有关更多帮助,请参阅此网站。

这是正确的,也是气流设计的一部分。如果您查看,您将看到以下说明:

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

让我们重复一下调度程序在开始日期之后的一个调度时间间隔内,在该时段结束时运行作业


这是正确的,是气流设计的一部分。如果你看一下,你会看到解释:

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

让我们重复一下调度程序在开始日期之后的一个调度时间间隔内,在该时段结束时运行作业


这两个日期在时间上都是正确的。手动触发器使用当前时间。时间表在时间框结束时运行:“计划程序在开始日期后的一个时间间隔内,在时段结束时运行作业。”。请参阅Airflow文档中的详细信息:好的,谢谢,所以我不能在计时器结束之前强制Airflow运行?恐怕这是不可能的。不过,您可以使用另一个日期,如明天,请参阅Airflow宏:Airflow speak中的两个日期都是正确的。手动触发器使用当前时间。计时器结束后将运行计划:“计划程序在开始日期后的一个计划时间间隔内,在周期结束时运行作业。“。在Airflow文档中查看更多信息:好的,谢谢,所以我不能在时间框结束之前强制Airflow运行?恐怕这是不可能的。不过,您可以使用另一个日期,比如明天,请参见Airflow宏:我已经尝试了
catchup=False
(事实上,我是用参数启动作业的)我认为
catchup=True
用于指定气流,以创建从现在到最后一次成功的DAG runHey@RonanT之间缺少的DAG-检查我的最新修订。您的计划间隔似乎也有点偏离。您关于catchup的假设也很准确,但我始终更喜欢将其设置为
false
,以便uns最近的一天。您始终可以使用
start\u date
end\u date
创建重复的手动触发器DAG来回填您错过的日期。我已经尝试了
catchup=False
(事实上,我是用参数启动作业的)我认为
catchup=True
用于指定气流,以创建从现在到最后一次成功的DAG runHey@RonanT之间缺少的DAG-检查我的最新修订。您的计划间隔似乎也有点偏离。您关于catchup的假设也很准确,但我始终更喜欢将其设置为
false
,以便uns最近的一天。您始终可以使用
start\u date
end\u date
创建重复的手动触发器DAG来回填您错过的日期。