首页 > 解决方案 > 在 EST 时区调度 DAG - Airflow

问题描述

我有一个气流调度程序,它的时区为 UTC。我想根据 EST 时间安排 DAG。这里的问题是我想安排我的 DAG 在每个周一至周五的东部标准时间下午 6 点到晚上 9 点运行。将 EST 转换为 UTC 下午 6 点变成了晚上 10 点,晚上 9 点变成了第二天的凌晨 1 点。

我尝试根据 UTC - '0 10-23,1 * * MON-FRI'给出 crontab 表达式,但由于时区不同,我的 DAG 将跳过周五上午 0 点到凌晨 1 点(美国东部标准时间晚上 8 点到 9 点)的运行。请帮助我为此进行适当的安排。

任何帮助表示赞赏。

标签: cronairflowairflow-schedulerdirected-acyclic-graphs

解决方案


你基本上有两个选择:

  1. 更改系统范围的时区。
  2. 让您了解 DAG 时区。

1.更改系统范围的时区

在您的airflow.cfg中,您可以定义调度时区是什么。例如,对于阿姆斯特丹,它将是:

[core]
default_timezone = Europe/Amsterdam

这将根据阿姆斯特丹时间安排完整的气流安装。

2. 让你的 DAG 时区感知

如果您提供start_date时区感知的,它将使用该时区来跟踪夏令时,如此处所述。以下示例直接从气流文档中复制而来, 并说明了如何让您的 DAG timeozne 感知。

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]>

推荐阅读