
# 在线服务优雅停机
#### 场景描述
推理在线服务的优雅停机用于服务下线、升级、缩容、故障迁移等场景，目的是平滑结束在途请求、释放资源、保存状态、避免强制中断，保障业务连续性与数据完整性。
典型适用场景：
- 服务正常下线：业务迭代、版本更替、资源回收时，等待当前推理请求完成后再终止实例，避免客户端报错；
- 滚动升级：更新模型或镜像时，逐步优雅下线旧实例、拉起新实例，实现零中断平滑升级；
- 实例缩容：减少副本数、释放闲置资源时，优先优雅终止空闲实例，不影响正在处理的请求；
- 节点、硬件故障迁移：NPU、CPU、交换机异常触发迁移时，优雅停机保存临时推理上下文，减少任务失败；
- 大模型、长任务推理：流式、长文本推理耗时久，避免强制终止导致结果残缺、会话中断。
 
#### 约束限制
- 健康检查联动：已配置健康检查的服务，开启优雅停机后，收到停止指令会强制延后 3 分钟再停止。
- 资源池限制：专属资源池和公共资源池均支持。
- 部署模式：基础模式、多角色分离模式均支持；多角色分离需所有推理单元统一配置。
- 命令依赖：停机命令依赖容器内基础工具（sh、kill、trap 等），依赖缺失会导致执行失败。
 
#### 优雅停机配置操作
登录[ModelArts管理控制台](https://console.huaweicloud.com/modelarts/)，在左侧菜单栏中选择"模型推理\>在线推理"，进入在线服务管理页面。部署在线服务时，在"单元配置 \> 更多配置"中勾选"优雅停机"，并设置"停机时间"和"停机命令"。具体操作请参见[推理在线服务单机部署](https://support.huaweicloud.com/inference-modelarts/inference2.0-modelarts-0004.html)。
"停机时间（秒）"：建议普通服务 30s；大模型或长任务 60--300s。
"停机命令"（容器内执行），以下示例为3选1，只填写1条即可：
- 示例 1（终止进程）
  ```
  kill -SIGTERM $(pgrep -f app.py)
  ```
  适用：直接优雅终止业务主进程
  原理：发送标准优雅终止信号，让进程自行收尾再退出
  适用场景：Python 脚本、Flask/FastAPI 独立进程服务
  
- 示例 2（优雅退出）
  ```
  trap 'exit 0' SIGTERM
  ```
  适用：容器内脚本常驻进程，提前捕获停机信号
  原理：提前注册信号监听，收到停止指令自动平稳退出
  适用场景：shell 常驻服务、后台守护进程
  
- 示例 3（释放连接 / 保存状态）
  ```
  /bin/sh -c stop_service.sh
  ```
  适用：复杂停机逻辑（多步骤收尾）
  原理：调用容器内自定义停机脚本，可实现保存日志、断开连接、缓存落盘、关闭子进程等全套动作
  适用场景：业务流程复杂、需要自定义收尾操作的服务
  
配置完成后，停止或升级服务，观察在途请求正常完成、无报错即可。
