# 2026-06-08 — 批量安装 Agent 已安装且版本足够则跳过

## 摘要

批量/单机「安装 Agent」时：若子机已安装且 Agent 版本 **不低于** 主站 `web/agent/agent.py` 中的版本，则跳过 SSH 安装；仅当未安装或版本更低时才执行 `install.sh`。

## 动机

批量勾选已部署 Agent 的服务器会重复跑完整安装脚本，耗时长且可能短暂中断 Agent。

## 涉及文件

- `server/utils/agent_version.py` — 主站版本 SSOT + 版本比较
- `server/application/server_batch_common.py` — `agent_install_skip_result`、Redis/SSH 版本探测
- `server/application/services/server_batch_service.py` — `_run_install_agent` 跳过逻辑
- `server/api/servers.py` — 单机 `install-agent` 对齐
- `tests/test_agent_version.py`

## 迁移 / 重启

- 无 DB 变更；需重启 API

## 行为

| 子机状态 | 动作 |
|----------|------|
| 无 agent_api_key 且无 agent_version | 执行安装 |
| 已安装，版本 ≥ 主站 | 跳过（success，stdout 说明） |
| 已安装，版本 < 主站 | 执行安装（等同升级） |

版本来源优先级：Redis `heartbeat:{id}` → MySQL `agent_version` → SSH 读取 `/opt/nexus-agent/agent.py`。

## 验证

```bash
pytest tests/test_agent_version.py -q
bash scripts/local_verify.sh
```
