You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Airflow DAG使用CRON'30 20 * * 2,3'不运行,如何配置周二周三调度?

你遇到的问题核心是Airflow的cron表达式解析默认匹配实例配置的时区(你这里是UTC),你写的30 20 * * 2,3对应的是UTC时间每周二、周三20:30,和你预期的本地时区时间不一致,所以不会按时触发。除此之外DAG的start_date配置错误、catchup参数设置不当也可能导致调度不触发。

解决方案

1. 直接调整cron表达式适配UTC时区

如果你不打算修改时区配置,只需要把你预期的本地时间换算为UTC时间,更新schedule_interval即可。
比如你需要的是北京时间(UTC+8)每周二、周三20:30运行,对应UTC时间为每周二、周三12:30,直接设置即可:
schedule_interval='30 12 * * 2,3'
注:Airflow cron的星期取值规则为0/7代表周日、1代表周一、2代表周二、3代表周三,星期取值与时区无关,无需调整

2. 单独为DAG配置目标时区(推荐,Airflow 2.0+支持)

不需要修改全局配置,只需要在DAG定义时指定时区,cron表达式就会按照你指定的时区解析,示例代码如下:

import pendulum
from airflow import DAG
from airflow.operators.bash import BashOperator

with DAG(
    dag_id="your_target_dag_id",
    schedule_interval="30 20 * * 2,3",
    # 替换为你实际使用的时区,国内常用Asia/Shanghai
    start_date=pendulum.datetime(2024, 1, 1, tz="Asia/Shanghai"),
    catchup=False,
    tags=["your_tag"]
) as dag:
    test_task = BashOperator(
        task_id="test_task",
        bash_command="echo 'task run successfully'"
    )

3. 全局修改Airflow默认时区

如果所有DAG都需要使用非UTC时区调度,可以修改airflow.cfg配置文件:
找到core配置段,修改default_timezone参数:

[core]
default_timezone = Asia/Shanghai

修改完成后重启Airflow scheduler和webserver服务即可生效。

配置生效校验项

修改配置后需要确认以下几点,避免调度异常:

  • DAG的start_date必须早于你期望的首次调度时间,比如你期望2024年5月21日(周二)首次运行,start_date需要设置为2024年5月20日或更早
  • 修改DAG配置后可以在Airflow webUI的DAG详情页查看Next Run时间,确认是否符合预期
  • 如果不需要回溯历史任务,务必将catchup参数设置为False

内容的提问来源于stack exchange,提问作者bob kevin

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.02 13:09:04