# 服务停止 Runbook

**用途**: 正常维护停止服务或紧急停止服务

**适用场景**: 系统维护、配置更新、紧急故障处理

---

## 正常停止（维护场景）

### 1. 通知用户（可选）

如果需要停机维护，提前通知：

```bash
# 检查当前在线用户数（通过日志估算）
docker-compose logs --since=5m app | grep -c "POST /api/v1/auth/login"
```

### 2. 优雅停止服务

```bash
# 发送停止信号（会等待现有请求处理完成）
docker-compose stop

# 或直接 down（不会等待）
docker-compose down
```

### 3. 确认停止

```bash
# 确认没有运行的容器
docker-compose ps

# 确认端口已释放
netstat -tlnp | grep 8080
```

---

## 紧急停止（故障场景）

当服务出现严重问题时，需要紧急停止：

### 1. 立即停止

```bash
# 强制停止所有容器
docker-compose kill

# 如果 docker-compose 无响应，直接 kill
docker kill $(docker ps -q -f name=user-management)
```

### 2. 确认资源释放

```bash
# 确认容器已停止
docker ps -a | grep user-management

# 确认端口已释放
netstat -tlnp | grep 8080
```

### 3. 记录故障现场

```bash
# 保存故障时的日志
docker-compose logs > logs/emergency_$(date +%Y%m%d_%H%M%S).log

# 保存当前数据库状态
cp data/user_management.db data/user_management_emergency_$(date +%Y%m%d_%H%M%S).db
```

---

## 停止后的检查

停止服务后，确认以下内容：

- [ ] 所有容器已停止
- [ ] 端口 8080 已释放
- [ ] 日志已保存
- [ ] 数据库文件完整
- [ ] 无残留进程

---

## 相关文档

- [服务启动](./01-服务启动.md) - 如何启动服务
- [日志分析](./04-日志分析.md) - 如何分析日志排查问题
- [备份恢复](./05-备份恢复.md) - 如何恢复数据

---

**维护日期**: 2026-04-11
**下次审查**: 每月检查一次
