如何使用Airflow REST API停止运行中的DAG?是否存在对应API接口?
答:当然可以通过REST API停止运行中的DAG,只是Airflow里的“停止”需要对应到具体的DAG Run和Task Instance操作,我给你拆解可行的方案:
首先得明确Airflow的核心逻辑:一个“运行中的DAG”其实指的是处于running状态的DAG Run实例,要停止它,本质是终止这个DAG Run的执行流程,同时停止其中正在运行的Task Instance。Airflow没有直接叫“stop”的API端点,但可以通过以下两种方式实现:
1. 直接终止整个DAG Run(推荐)
你可以通过set_dag_run_state API将目标DAG Run的状态设置为failed或success,调度器会自动停止这个DAG Run的所有后续任务调度,同时标记整个实例为终止状态。
具体步骤:
- 第一步:先获取目标DAG的所有运行中实例,调用
GET /api/v1/dags/{dag_id}/dagRuns,过滤state=running的结果,拿到对应的dag_run_id或execution_date。 - 第二步:调用PATCH请求修改DAG Run状态,示例curl命令:
curl -X PATCH \ "http://your-airflow-webserver/api/v1/dags/your-dag-id/dagRuns/target-dag-run-id/state" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your-auth-token" \ -d '{"state": "failed"}'
提示:如果设为
success,会直接标记整个DAG Run为成功,未执行的任务会被跳过;设为failed则会终止流程并标记为失败,根据你的需求选择即可。
2. 单独停止某个正在运行的Task Instance
如果只需要停止DAG Run中的特定任务,而不是整个实例,可以调用set_task_instance_state API,将目标Task Instance的状态设置为failed(或其他终止状态):
curl -X PATCH \ "http://your-airflow-webserver/api/v1/dags/your-dag-id/dagRuns/target-dag-run-id/tasks/your-task-id/state" \ -H "Content-Type: application/json" \ -H "Authorization: Bearer your-auth-token" \ -d '{"state": "failed", "mark_success": false}'
关于你提到的delete_dag_run的注意点
这个API是删除DAG Run的记录,但不会主动停止正在后台执行的任务进程——也就是说,就算你调用了删除,已经启动的Task可能还会继续跑直到结束,所以它不是真正意义上的“停止”运行中的DAG,更适合清理历史记录。
补充:以上API都基于Airflow 2.x版本,如果你用的是1.x版本,API结构会略有不同,建议对应你的Airflow版本查看官方文档的API规范。
内容的提问来源于stack exchange,提问作者hoverzh
相关产品推荐
相关产品推荐

