chore(deploy): 清理部署残留(1.0GB)+ 把清理写成可复跑脚本

用户说「清理一下」。实测 /opt/agentmail 累计 1.3GB:
- 网关旧二进制 33 份 × 24MB ≈ 790MB(每次 redeploy 留一份,从 09-05 起没清过)
- 插件快照:opencode 6 份 339MB、dsh 7 份 195MB、zcode 16 份、pi 9 份
- /tmp 里的部署前数据库备份 10 份(tmpfs,占内存)

新增 `deploy/prune-deploy-artifacts.sh`(可复跑,不手敲 rm),两条硬规矩:
① **保留回滚窗口**:网关留最新 3 份、每个插件留最新 3 份快照,`current` 永远保留
(发布纪律要求有回滚目标,所以不是全清);
② ★ **绝不删正在使用的快照**:扫 /proc 的 cmdline 与 cwd,命中就跳过。

执行结果:**/opt/agentmail 1305MB → 302MB(释放 1003MB)**,7 个服务全部 active,
`current` 指向未变,`check-deploy-drift` 仍报「四个宿主都在跑当前代码」。

## 过程中的一处自纠

"在用"闸门第一版有**自我匹配**缺陷:我的测试命令把路径写在命令行里,于是扫 /proc 时
扫到了自己 ⇒ 对不存在的路径也判"在用"(与 `pkill -f` 杀掉自己那条命令同一类)。
已改为排除本进程及其祖先链,并**换正确方式重测**(路径从文件读、不进 cmdline):
在用快照判"在用" ✓、不存在的路径不误判 ✓ —— 判据两侧都验过才敢执行删除。

文档:docs/DEV-TOOLING.md 记了用法与那两条规矩。
This commit is contained in:
2026-09-14 08:43:54 +08:00
parent 51789ee72e
commit 69b1887eae
2 changed files with 123 additions and 0 deletions

View File

@ -67,3 +67,19 @@ pi-lens 在编辑文件后会走 smart-default 回退选择格式化器(见它
- `biome.jsonc`:只挡得住 biome**挡不住 prettier** —— 两者是并列的候选格式化器,
各有各的配置。所以真正的开关是 `.pi-lens.json`,它两条改写路径一起关。
## 部署残留清理(`deploy/prune-deploy-artifacts.sh`
部署会留下两类持续增长的东西:网关旧二进制(每份 ~24MB与插件快照opencode/dsh 的
快照含 node_modules一份几十 MB。2026-09-14 实测 `/opt/agentmail` 累计到 **1.3GB**
其中旧二进制 ~790MB、快照 ~540MB。
```bash
bash deploy/prune-deploy-artifacts.sh # 干跑,只报告
bash deploy/prune-deploy-artifacts.sh --apply # 真删(默认:网关留 3 份、每插件留 3 份快照)
```
两条硬规矩:**保留回滚窗口**(发布纪律要求有回滚目标,所以不是全清);**绝不删正在使用的
快照**(扫 /proc 的 cmdline 与 cwd命中就跳过 —— 删掉它进程一重启就找不到自己的代码)。
注意那个"在用"判断必须排除**本进程及其祖先链**:调用方常把路径写在命令行里,
不排除就会出现"永远判为在用"(与 `pkill -f` 杀掉自己那条命令同一个坑,已写进脚本注释)。