You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.30 17:12:32