在Airflow中,我希望作业在非UTC时区中的每天特定时间运行。我该如何安排时间?
问题在于,一旦触发了夏令时,我的工作要么运行得太早一个小时,要么就运行了一个小时。 In the Airflow docs,看来这是一个已知问题:
如果您设置了cron时间表,Airflow会假设您始终想要 在完全相同的时间运行。然后它将忽略日光节约 时间。因此,如果您的时间表显示间隔运行 每天的格林尼治标准时间+08:00,它将始终在时间间隔08:00结束 格林尼治标准时间+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]>