# 2026-06-08 — 服务器批量任务后台执行（对齐脚本库）

## 摘要

服务器页的「修改分类、健康检查、检测目标路径、安装/升级/卸载 Agent」改为后台队列执行：点击后立即返回，顶栏显示进度条，完成后弹出结果摘要，与脚本库一致。

## 动机

批量 SSH 操作耗时长，原先前端阻塞等待 HTTP 响应，对话框一直 loading，无法继续操作其他功能。

## 涉及文件

### 后端
- `server/application/server_batch_common.py` — 批量 SSH 共用 helper
- `server/infrastructure/redis/server_batch_store.py` — Redis 任务状态（2h TTL）
- `server/application/services/server_batch_service.py` — 后台 runner + WebSocket 进度
- `server/api/servers.py` — 批量端点返回 `BatchJobStarted`；新增 `GET /batch/jobs/{id}`
- `server/api/schemas.py` — `BatchJobStarted` / `BatchJobStatus`

### 前端（本次补充）

- `BatchAgentResultDialog` 不再 `persistent`；loading 文案改为「正在加载结果…」（仅查看详情时拉取结果，不再表示阻塞执行）
- 顶栏进度条：服务器批量任务可点击查看进行中/已完成结果
- `submitServerBatchJob` 若 API 未返回 `job_id`（旧版同步接口）则明确报错

## 与脚本库对齐的行为

| 操作 | 点击后 |
|------|--------|
| 修改分类 / 健康检查 / 检测路径 / 安装·升级·卸载 Agent | 立即 toast「已提交」+ 顶栏进度条，**不弹等待框** |
| 执行结束 | 顶栏通知 +「查看详情」打开结果列表 |
| 脚本库执行 | 同上（已有） |

**未发现其他页面**仍使用 `BatchAgentResultDialog` 阻塞等待；仅 `App.vue` 在「查看详情」时打开该对话框。


## 迁移 / 重启

- 无需 DB 迁移
- 需重启 API 并部署前端

## 验证

```bash
bash scripts/local_verify.sh
cd frontend && npm run build
# 服务器页勾选子机 → 安装/升级/卸载 Agent → 应立即 toast + 顶栏进度 → 完成后可查看详情
```

## 生产部署（2026-06-08）

热更新至 `nexus-prod-nexus-1`（`docker cp` + `docker restart`）：

- 前端：`index-D4DsercP.js` / `ServersPage-Cj6_30Tm.js`（含 `upgrade-agent` / `uninstall-agent` 后台提交，无 `runBatchAgentOp`）
- 后端：`server_batch_service.py` 等批量任务模块
- `web/agent/install.sh`（宝塔 Python / 并行安装 3.12）

验证：

- `GET https://api.synaglobal.vip/health` → `ok`
- `GET /app/index.html` → 新 bundle 哈希
- `GET /api/servers/batch/jobs/{id}` → 401（端点存在，需登录）

**请强刷浏览器缓存（Ctrl+Shift+R）后再试批量升级/卸载 Agent。**
