--- title: "取消任务" date: 2026-02-05 lastmod: 2026-02-05 description: "介绍如何在 Easysearch 中取消集群中正在执行的任务。" tags: ["任务管理", "取消", "异步操作"] summary: "此 API 用于取消集群中的一个或多个任务。 API # POST /_tasks/_cancel POST /_tasks/{task_id}/_cancel API 的作用 # 取消集群中正在执行的一个或多个任务。此 API 支持多种取消策略: 取消指定任务:通过 task_id 取消特定任务 按节点取消:取消特定节点上的所有任务 按类型取消:取消特定类型的任务 取消父任务:取消父任务及其所有子任务 API 的参数 # 路由参数 # 参数 类型 是否必需 描述 task_id string 可选 要取消的任务 ID 格式:node_id:task_number 如果不提供,可通过查询参数取消多个任务 查询字符串参数 # 参数 类型 是否必需 默认值 描述 nodes string 可选 所有节点 指定要取消任务的节点列表" --- 此 API 用于取消集群中的一个或多个任务。 ## API ``` POST /_tasks/_cancel POST /_tasks/{task_id}/_cancel ``` ## API 的作用 取消集群中正在执行的一个或多个任务。此 API 支持多种取消策略: - **取消指定任务**:通过 task_id 取消特定任务 - **按节点取消**:取消特定节点上的所有任务 - **按类型取消**:取消特定类型的任务 - **取消父任务**:取消父任务及其所有子任务 ## API 的参数 ### 路由参数 | 参数 | 类型 | 是否必需 | 描述 | |------|------|----------|------| | `task_id` | string | 可选 | 要取消的任务 ID
格式:`node_id:task_number`
如果不提供,可通过查询参数取消多个任务 | ### 查询字符串参数 | 参数 | 类型 | 是否必需 | 默认值 | 描述 | |------|------|----------|--------|------| | `nodes` | string | 可选 | 所有节点 | 指定要取消任务的节点列表
逗号分隔的节点 ID
例如:`node1,node2` | | `actions` | string | 可选 | 所有操作 | 指定要取消的任务操作类型
支持通配符
例如:`cluster:*`, `indices:admin` | | `parent_task_id` | string | 可选 | 无 | 指定父任务 ID
取消该父任务的所有子任务
格式:`node_id:task_number` | | `wait_for_completion` | boolean | 可选 | false | 是否等待取消操作完成
`true`:阻塞直到任务取消完成
`false`:取消开始后立即返回 | | `timeout` | time | 可选 | 无 | 操作超时时间
格式:`30s`, `1m`, `5m` 等 | | `group_by` | string | 可选 | nodes | 响应中任务的分组方式
可选值:`nodes`, `parents`, `none` | ## 请求示例 ```bash # 取消指定任务 POST /_tasks/Mgqdm0f9SEGClWxp_RdnaQ:17416/_cancel # 取消特定节点上的所有任务 POST /_tasks/_cancel?nodes=node1,node2 # 取消特定类型的任务 POST /_tasks/_cancel?actions=cluster:* # 取消父任务的所有子任务 POST /_tasks/_cancel?parent_task_id=Mgqdm0f9SEGClWxp_RdnaQ:1000 # 取消任务并等待完成 POST /_tasks/_cancel?wait_for_completion=true # 设置超时时间 POST /_tasks/_cancel?wait_for_completion=true&timeout=30s # 组合使用多个参数 POST /_tasks/_cancel?nodes=node1&actions=indices:*&wait_for_completion=true&timeout=1m ``` ## 响应示例 ### 成功响应(不等待完成) ```json { "nodes": { "Mgqdm0f9SEGClWxp_RdnaQ": { "name": "data-node-1", "tasks": [ { "task_id": "Mgqdm0f9SEGClWxp_RdnaQ:17416", "type": "transport", "action": "indices:data/write/reindex", "description": "reindex from [source] to [target]", "cancellable": true, "cancelled": true } ] } } } ``` ### 成功响应(等待完成) ```json { "nodes": { "Mgqdm0f9SEGClWxp_RdnaQ": { "name": "data-node-1", "tasks": [ { "task_id": "Mgqdm0f9SEGClWxp_RdnaQ:17416", "type": "transport", "action": "indices:data/write/reindex", "description": "reindex from [source] to [target]", "cancellable": true, "cancelled": true, "status": "completed" } ] } }, "failures": [] } ``` ### 部分失败响应 ```json { "nodes": { "Mgqdm0f9SEGClWxp_RdnaQ": { "name": "data-node-1", "tasks": [ { "task_id": "Mgqdm0f9SEGClWxp_RdnaQ:17416", "cancelled": true } ] } }, "failures": [ { "task_id": "node2:12345", "reason": "task not found" } ] } ``` ## 任务操作类型 支持的任务操作类型(actions)包括: | 模式 | 描述 | |------|------| | `cluster:*` | 所有集群级别的操作 | | `indices:*` | 所有索引相关的操作 | | `indices:data/write/*` | 所有索引写入操作 | | `indices:data/read/*` | 所有索引读取操作 | | `indices:admin/*` | 所有索引管理操作 | ## 取消策略 ### 按节点取消 ```bash # 取消特定节点上的所有任务 POST /_tasks/_cancel?nodes=node1,node2 ``` ### 按操作类型取消 ```bash # 取消所有写入操作 POST /_tasks/_cancel?actions=indices:data/write/* # 取消所有集群管理操作 POST /_tasks/_cancel?actions=cluster:admin/* ``` ### 按父任务取消 ```bash # 取消父任务的所有子任务 POST /_tasks/_cancel?parent_task_id=node1:1000 ``` ## 可取消的任务 并非所有任务都可以取消。任务的可取消性取决于: - **任务类型**:某些任务(如系统内部任务)不可取消 - **任务状态**:已完成或失败的任务无法取消 - **任务实现**:任务是否实现了取消逻辑 检查响应中的 `cancellable` 字段确认任务是否可取消。 ## 使用场景 1. **停止长时间运行的任务**:取消执行时间过长的任务 2. **释放资源**:释放占用集群资源的任务 3. **错误恢复**:取消执行错误的任务 4. **批量管理**:批量取消某类任务 ## 注意事项 1. 此 API 只支持 POST 方法 2. 取消操作是异步的,`wait_for_completion=true` 会等待取消完成 3. 某些任务可能无法取消,会返回错误信息 4. 取消正在进行的写入操作可能导致部分数据未写入 5. 取消操作本身也受超时限制 ## 最佳实践 1. **确认任务 ID**:取消前确认任务 ID 正确 2. **检查可取消性**:检查任务的 `cancellable` 属性 3. **使用通配符谨慎**:批量取消时确保匹配范围正确 4. **等待取消完成**:重要任务建议使用 `wait_for_completion=true` 5. **监控取消结果**:检查 `failures` 字段确认取消是否成功 ## 相关文档 - [查询任务列表](./get-task-list.md) - [查询任务Cat格式](./get-tasks-cat-format.md)