Airflow 1.8.1任务处于scheduled状态但调度器未拾取问题咨询
Airflow 1.8.1: 清理任务后处于"scheduled"状态但调度器不拾取的问题排查与解决
我之前帮同事排查过Airflow 1.8.1里的这个问题,确实是这个老版本的一个常见状态同步bug——当你清理运行中的任务时,元数据库里的任务状态可能没有正确更新,导致调度器“看不到”处于scheduled状态的任务。下面是几个经过验证的处理方式:
1. 手动修正任务实例的数据库状态
Airflow 1.8.x的调度器依赖元数据库(比如PostgreSQL/MySQL)里的task_instance表来识别待执行任务。你可以直接进入数据库执行更新:
- 先定位目标任务的记录:
SELECT * FROM task_instance WHERE dag_id = '你的DAG_ID' AND task_id = '你的任务ID' AND execution_date = '任务的执行时间'; - 将状态改为
queued,让调度器能立刻拾取:UPDATE task_instance SET state = 'queued' WHERE dag_id = '你的DAG_ID' AND task_id = '你的任务ID' AND execution_date = '任务的执行时间';
2. 用命令行工具强制重新触发
如果不想直接操作数据库,可以用Airflow的命令行工具重新触发任务:
- 清理并重置任务的运行状态:
airflow clear -s <任务开始时间> -e <任务结束时间> -t <任务ID> <DAG_ID> --reset_dag_runs - 或者直接触发指定的DAG运行:
airflow trigger_dag -r <目标运行的run_id> <DAG_ID>
3. 重启Airflow调度器和Worker
老版本的Airflow调度器可能会缓存任务状态,重启后会重新读取元数据库的最新状态,大概率能拾取到scheduled状态的任务:
# 重启调度器 sudo service airflow-scheduler restart # 重启Worker(如果使用CeleryExecutor) sudo service airflow-worker restart
4. 检查任务的基础配置
最后再确认几个容易被忽略的点:
- 任务所在的DAG没有被暂停(在Airflow UI里查看DAG的开关是否处于开启状态)
- 任务没有未完成的上游依赖
schedule_interval配置正确,没有设置成过去的时间导致调度器跳过
另外提一句,这个状态同步的问题在Airflow 1.10.x及以上的版本已经被官方修复了,如果你们的业务允许,升级到更高版本是一劳永逸的解决方案。
内容的提问来源于stack exchange,提问作者Chengzhi
相关产品推荐
相关产品推荐

