Airflow DAG持续排队未执行:调度器故障确认与重置问询
1. 如何确认Airflow调度器是否故障?
- 检查调度器进程状态
- 在部署节点执行
ps aux | grep airflow-scheduler,确认是否有存活的调度器进程,排查是否存在异常退出的情况。 - 若使用systemd管理服务,执行
systemctl status airflow-scheduler,查看服务是否处于active (running)状态,同时检查日志输出中的错误信息。
- 在部署节点执行
- 查看调度器日志
- 直接查看日志目录(默认路径为
$AIRFLOW_HOME/logs/scheduler)下的最新日志,搜索是否存在数据库连接失败、线程卡死、依赖缺失等报错。 - 也可通过Airflow Web UI的
Admin > Logs入口,选择调度器日志进行查看。
- 直接查看日志目录(默认路径为
- 验证数据库连接与状态
- 执行
airflow db check验证元数据库(PostgreSQL/MySQL等)连接是否正常,数据库连接异常会直接导致调度器无法工作。 - 检查数据库是否存在锁表或连接数耗尽问题:PostgreSQL可执行
SELECT * FROM pg_locks WHERE NOT granted;查询锁情况,MySQL用SHOW PROCESSLIST;查看当前连接。
- 执行
- 检查DAG解析与调度状态
- 在Web UI的
Browse > DAG Runs中确认是否有新的DAG Run生成,长时间无新Run则说明调度器未正常生成任务。 - 执行
airflow dags list-import-errors,排查是否存在DAG解析错误,大量解析错误会阻塞调度器运行。 - 执行
airflow scheduler jobs查看调度器当前作业状态,确认是否存在停滞任务。
- 在Web UI的
2. 如何重置Airflow调度器(含Web服务器)
- 停止相关进程
- 若使用systemd管理:
sudo systemctl stop airflow-scheduler sudo systemctl stop airflow-webserver - 若为直接运行的进程,可通过
pkill -f airflow-scheduler和pkill -f airflow-webserver终止进程(建议先通过ps aux确认进程ID,避免误杀)。
- 若使用systemd管理:
- 清理残留状态
- 清理元数据库中过期的DAG Runs和任务实例:
airflow db clean --clean-before-today - 可选:执行
airflow scheduler clear重置调度器心跳记录(此操作会清除调度器运行状态,需谨慎使用)。
- 清理元数据库中过期的DAG Runs和任务实例:
- 重启服务
- systemd方式:
sudo systemctl start airflow-scheduler sudo systemctl start airflow-webserver - 直接后台启动:
airflow scheduler -D airflow webserver -D -p 8080
- systemd方式:
- 验证重置效果
- 再次通过
systemctl status或ps aux确认进程状态。 - 查看Web UI的
DAG Runs页面,确认排队的任务是否开始被调度,是否有新的DAG Run生成。 - 检查调度器日志,确认无报错信息。
- 再次通过
内容的提问来源于stack exchange,提问作者Mihir Samant
相关产品推荐
相关产品推荐

