Airflow调度器无法自动调度任务但可手动触发DAG运行求助
Airflow自动调度不触发排查方案
问题背景
基于apache/airflow:2.9.0定制镜像(仅添加Python依赖),通过docker-compose部署,使用LocalExecutor,设置AIRFLOW__CORE__PARALLELISM=2。Webserver可正常访问,调度器状态显示正常,手动触发DAG可运行,但设置1分钟、15分钟调度间隔的DAG无法自动触发,无报错日志。
核心排查点
1. DAG基础配置检查
- 确认DAG已解除暂停:环境变量
AIRFLOW__CORE__DAGS_ARE_PAUSED_AT_CREATION=true默认新建DAG为暂停状态,需在WebUI中手动开启目标DAG的启用开关。 - 修正
start_date配置:禁止使用动态值(如datetime.now()),必须设置为固定的过去时间。示例:
动态# 错误写法 start_date = datetime.now() # 正确写法 start_date = datetime(2024, 5, 1)start_date会导致DAG每次解析时更新触发基准时间,调度器无法确定有效触发窗口;未来时间的start_date会延迟触发。 - 验证
schedule_interval格式:1分钟间隔需写为*/1 * * * *,15分钟为*/15 * * * *,确保符合Cron语法规范。
2. Airflow调度配置修正
- 修复时区拼写错误:你的环境变量中
AIRFLOW__CORE__DEFUALT_TIMEZONE存在拼写错误,应为AIRFLOW__CORE__DEFAULT_TIMEZONE。建议明确设置具体时区(如Asia/Shanghai)而非system,避免时区偏差导致调度时间计算错误:AIRFLOW__CORE__DEFAULT_TIMEZONE: 'Asia/Shanghai' AIRFLOW__WEBSERVER__DEFAULT_UI_TIMEZONE: 'Asia/Shanghai' - 调整调度器扫描间隔:若DAG配置变更未被及时识别,可临时缩小DAG目录扫描间隔测试:
默认300秒的扫描间隔可能导致新调度配置延迟生效。AIRFLOW__SCHEDULER__DAG_DIR_LIST_INTERVAL: 10
3. 数据库与调度器状态核查
- 查看调度器决策日志:执行命令过滤调度器核心日志,确认是否有调度触发的决策记录:
若出现docker logs airflow_scheduler | grep -i "scheduling"Found 0 tasks to schedule,说明调度器未识别到符合条件的触发任务。 - 查询数据库调度记录:进入PostgreSQL容器检查DAG运行记录和调度器状态:
# 进入postgres容器 docker exec -it $(docker ps -q --filter name=postgres) psql -U airflow airflow # 查看最近的DAG运行记录 SELECT dag_id, execution_date, state FROM dag_run ORDER BY execution_date DESC LIMIT 10; # 查看调度器运行状态 SELECT * FROM scheduler_job ORDER BY start_date DESC LIMIT 1; - 验证数据库连接:确认调度器容器能正常连接数据库:
docker exec -it airflow_scheduler airflow db check
4. DAG文件与权限检查
- 检查DAG挂载权限:确认本地DAG目录(若挂载)的权限为
50000:0,否则调度器无法读取最新配置:ls -ld /path/to/your/dags - 验证DAG解析状态:在调度器容器中列出所有可识别的DAG,确认目标DAG已被正确加载:
docker exec -it airflow_scheduler airflow dags list
5. 其他潜在问题
- 排查自定义镜像依赖冲突:在容器内对比官方镜像的依赖列表,确认新增Python依赖未与Airflow内置依赖冲突:
docker exec -it airflow_scheduler pip list - 检查调度器进程状态:确认
airflow scheduler进程未意外退出:docker exec -it airflow_scheduler ps aux
内容的提问来源于stack exchange,提问作者Hakuna Matata
相关产品推荐
相关产品推荐

