Airflow DAG每日定时任务被重复触发4次,配置catchup等参数无效如何解决
问题排查及解决方案
1. 修复错误的调度时间配置
你代码中的schedule_interval参数配置错误,是导致重复触发的核心原因:
- 标准5位cron表达式的结构为
分 时 日 月 周,你想要实现每日19点触发,正确写法为schedule_interval='0 19 * * *' - 你当前写的
0 19 * * * *是6位秒级cron结构,实际含义为「每小时的第19分钟0秒触发」,和你预期的每日1次完全不符
2. 排查DAG目录重复文件
检查Airflow的dags文件夹下是否存在多个包含同名DAG的Python文件,比如备份文件postgres_backup_bak.py、旧版本代码文件等,Airflow会读取所有.py后缀文件中的DAG配置,如果你有4个包含该DAG的文件,就会出现每日触发4次的情况。
3. 补充任务超时配置
在default_args中添加execution_timeout参数,避免备份任务运行时间过长被Airflow判定为超时强制终止,进而触发重试:
default_args = { 'retries': 1, 'retry_delay': timedelta(minutes=30), 'start_date': datetime(2021, 1, 1), 'execution_timeout': timedelta(hours=2) # 可根据实际备份耗时调整 }
4. 检查多调度器配置
如果你用的是Airflow 2.x多调度器部署,需要确认配置文件中开启了行级锁,避免多个调度器重复调度同一个DAG:
[scheduler] use_row_level_locking = True
内容的提问来源于stack exchange,提问作者asal
相关产品推荐
相关产品推荐

