对于以下配置,气流DAG在星期一触发两次。
当我使用30 11 * * 1
cron表达式时,DAG根本不会触发。所以想通了,我必须在表达式中再加上一个*。
30 11 * * 1 *
-有效。
default_args:
'start_date': airflow.utils.dates.days_ago(1)
DAG:
schedule_interval = 30 11 * * 1 *
,##这是每周一次,运行时间为星期一11:30。
但是,DAG每个星期一都会触发两次。相距1分钟:
可能是什么原因?
答案 0 :(得分:0)
6位数的cron表达式不正确,您输入的第一个正确。您运行了DAG几次?
我建议您尝试先运行schedule_interval=@weekly
,看看会发生什么?
答案 1 :(得分:0)
正在使用气流的cron解析器将第六位解释为秒(如您在此处看到:https://github.com/kiorky/croniter/blob/master/src/croniter/tests/test_croniter.py#L14)。
我假设您的DAG在一分钟内完成。在下一个计划程序循环中,它看到cron计划仍然匹配(在第58秒),因此它再次启动了DAG。
我遇到了同样的问题,因为Airflow文档链接到有关cron的Wikipedia条目,其中显示了6个条目。 6个条目是非标准的,并且有多个实现。无论如何,对于Airflow,第六项被解释为秒。
您的5位cron表达式应该起作用。也许再试一次?但是,请更改dag id,否则您可能会遇到奇怪的行为:来自https://cwiki.apache.org/confluence/display/AIRFLOW/Common+Pitfalls:Changing schedule interval always requires changing the dag_id, because previously run TaskInstances will not align with the new schedule interval
答案 2 :(得分:0)
所以最后,我找出了问题所在。
是的,正确的是5位数的cron表达式。
我正在使用schedule_interval = 30 11 * * 1 #(Every Monday 11:30 UTC)
这没用,因为我有start_time:
'start_date': airflow.utils.dates.days_ago(1)
我在Airflow上找到了这个博客—窍门是通过CRON表达式https://github.com/openlayers/openlayers/pull/10363找到确切的[开始日期]!
如果是每周工作,则起始日期应该是一周前。
所以我将其更改为'start_date': airflow.utils.dates.days_ago(7)
现在一切正常。
谢谢!