在Airflow中使用cron计划时如何考虑夏令时

时间:2018-10-05 14:58:53

标签: airflow

在Airflow中,我希望作业在非UTC时区中的每天特定时间运行。我该如何安排时间?

问题在于,一旦触发了夏令时,我的工作要么运行得太早一个小时,要么就运行了一个小时。 In the Airflow docs,看来这是一个已知问题:

  

如果您设置了cron时间表,Airflow会假设您始终想要   在完全相同的时间运行。然后它将忽略日光节约   时间。因此,如果您的时间表显示间隔运行   每天的格林尼治标准时间+08:00,它将始终在时间间隔08:00结束   格林尼治标准时间+1,无论是否有夏令时。

还有其他人遇到此问题吗?有没有解决的办法?当然,最佳实践不能是在夏时制发生后更改所有计划的时间吗?

谢谢。

1 个答案:

答案 0 :(得分:4)

正如您正确指出的那样,如果使用cron计划,则无法考虑夏令时(DST)。但是,从Airflow 1.10开始,您可以使用时区感知datetime对象代替Cron时间表,该对象占DST [1]:

import pendulum

local_tz = pendulum.timezone("Europe/Amsterdam")

default_args=dict(
    start_date=datetime(2016, 1, 1, tzinfo=local_tz),
    owner='Airflow'
)

dag = DAG('my_tz_dag', default_args=default_args)
op = DummyOperator(task_id='dummy', dag=dag)
print(dag.timezone) # <Timezone [Europe/Amsterdam]>