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

Airflow DAG设置周二至周日运行未生效问题排查

问题原因及修复方案

核心问题:Cron表达式星期字段取值错误

Airflow遵循Unix Cron语法规则,其中星期字段的有效值范围是0(周日)到6(周六),你配置的2-7包含了无效值7,导致调度表达式解析失败,最终周二无法触发执行。

正确的调度配置

要实现「除周一外每日执行」,可以用两种方式修正:

  1. 直接修正Cron表达式(明确指定允许的星期,覆盖周日、周二至周六):

    @dag(schedule_interval='00 04 * * 0,2-6', default_args=default_args)
    def my_dag():
        ...
    
  2. 任务级分支判断(通过代码逻辑跳过周一执行,兼容性更强):

    from airflow.operators.dummy import DummyOperator
    from airflow.operators.python import BranchPythonOperator
    from datetime import datetime
    
    default_args = {
        'owner': 'name',
        'depends_on_past': False,
        'start_date': days_ago(1),
        'email': ['my_email@gmail.com'],
        'email_on_failure': True,
        'retries': 3,  
        'retry_delay': timedelta(minutes=0.5),
        'catchup': False
    }
    
    @dag(schedule_interval='00 04 * * *', default_args=default_args)
    def my_dag():
        def check_weekday(**context):
            # weekday()返回0=周一,1=周二...6=周日
            if context['execution_date'].weekday() == 0:
                return 'skip_task'
            else:
                return 'actual_task'
    
        branch_op = BranchPythonOperator(
            task_id='check_weekday',
            python_callable=check_weekday,
            provide_context=True
        )
    
        skip_task = DummyOperator(task_id='skip_task')
        actual_task = ...  # 替换为你的实际任务逻辑
    
        branch_op >> [skip_task, actual_task]
    

额外注意事项

  • start_date设为days_ago(1)结合catchup=False时,DAG会从当前时间之后的第一个调度点开始执行,若期望周二触发,需确保start_date早于周二的4点。
  • 可在Cloud Composer的Airflow UI中查看DAG详情页的「Schedule Interval」,确认表达式是否被正确解析。

内容的提问来源于stack exchange,提问作者Shadow Walker

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 02:55:14