我正在使用以下逻辑在运行时更新DAG的调度程序:
now = time.localtime()
sched_interval = '30 6 * * *' if now.tm_isdst else '30 7 * * *'
dag = DAG(
'my_dag',
default_args=args,
schedule_interval=sched_interval,
max_active_runs=1,
catchup=False)
问题是:在DST之后,DAG将触发两次,因为调度程序将更新1小时以上。在这种情况下,如何避免运行两次?我正在使用AirFlow 1.9。
谢谢!
最佳答案
Airflow 1.9不提供解决夏时制的功能。它对时区一无所知,并以UTC±00:00运行所有内容。
如您所知,更改时间表间隔以模仿此缺少的功能是有问题的,因为
更改计划间隔通常需要更改dag_id,因为先前运行的TaskInstances不会与新的计划间隔[1]保持一致
因此,如果可能,最好的解决方案是至少升级到引入timezone-aware DAGs的Airflow 1.10。然后,您可以通过根据需要设置DAG的时区并为计划间隔使用crone表达式来实现所需的目标。
关于python - DST之后,AirFlow DAG运行两次,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/59089526/