Airflow DAG设置周二至周日运行未生效问题排查
问题原因及修复方案
核心问题:Cron表达式星期字段取值错误
Airflow遵循Unix Cron语法规则,其中星期字段的有效值范围是0(周日)到6(周六),你配置的2-7包含了无效值7,导致调度表达式解析失败,最终周二无法触发执行。
正确的调度配置
要实现「除周一外每日执行」,可以用两种方式修正:
直接修正Cron表达式(明确指定允许的星期,覆盖周日、周二至周六):
@dag(schedule_interval='00 04 * * 0,2-6', default_args=default_args) def my_dag(): ...任务级分支判断(通过代码逻辑跳过周一执行,兼容性更强):
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
相关产品推荐
相关产品推荐

