如何配置Airflow 2.3.3的start_date与schedule_interval实现每日7点UTC运行?
问题分析与解决方案
你的核心问题在于start_date仅配置了时间部分,缺少具体日期,导致Airflow无法正确计算调度周期。Airflow的调度逻辑依赖明确的起始日期+时间,且遵循"周期结束后触发"的规则(即schedule_interval定义的是周期的结束时间,触发运行的时间就是该结束时间点)。
正确配置方式
要实现部署后从最近的7点UTC开始每日自动运行,需按以下要求修改配置:
修正
start_date:设置为一个早于当前部署时间的UTC日期+7点时间。例如,若你在2022-11-22 10:00 UTC部署DAG,start_date应设为2022-11-21T07:00:00Z(Z表示UTC时区)。这样Airflow会识别到第一个周期是2022-11-21 07:00至2022-11-22 07:00,并在周期结束时(即2022-11-22 07:00)触发运行;后续每天7点UTC都会自动触发下一个周期的运行。保持
schedule_interval不变:"0 7 * * *"已经正确对应每日7点UTC的周期结束时间,无需修改。
修改后的完整YAML配置如下:
dag_args: dag_id: FTP_DAILY default_args: owner: 'Dev team' start_date: "2022-11-21T07:00:00Z" max_active_runs: 1 retries: 2 schedule_interval: "0 7 * * *" ftp_conn_id: 'ftp_dev'
关键注意事项
- 禁止使用动态
start_date(如datetime.now()):每次DAG解析时动态生成的日期会导致Airflow无法稳定跟踪调度周期,引发调度异常。 - 时区确认:确保GCP Composer的Airflow时区为UTC(默认配置),若时区被修改,需同步调整
schedule_interval的时间表达式。 - 部署后操作:若DAG已提前部署,修改配置后重新部署即可;若之前存在未触发的调度记录,可在Airflow UI中手动触发一次,后续调度会自动正常执行。
内容的提问来源于stack exchange,提问作者artofdoe
相关产品推荐
相关产品推荐

