fix(backup): 修复本地备份保留修剪静默失效,本地默认保留降到 2 份

bug:prune_local 里 ls 的 cd 只发生在命令替换的子 shell 中,
rm 却拿裸文件名在 PROJECT_ROOT 下执行——目标文件不存在,
而 rm -f 对不存在的文件静默成功。结果是"清理成功"日志照打、
本地备份数量却一直超出 KEEP(生产 configs 目录累积到 43 份,
dump 10 份,均超出 KEEP=7)。

修复:rm 改用 ${dir}/${file} 绝对路径,并补源码级守卫测试锁定。

顺带把 .env.server.example 的默认保留从 7 降到 2:
本地备份只是断网应急,OSS 已有完整备份;而部署脚本的磁盘预检
要求 可用 ≥ 备份目录×2,本地留太多会直接把部署卡死
(这次就是 3.8G 备份触发预检失败 → 被迫清构建缓存 → 全量构建变慢)。
This commit is contained in:
yml2213
2026-10-03 15:51:01 +08:00
parent 69e3d9a396
commit 8ecb8a879a
3 changed files with 27 additions and 3 deletions
+6 -2
View File
@@ -157,8 +157,12 @@ prune_local() {
return
fi
while IFS= read -r file; do
rm -f -- "${file}"
log "清理本地旧备份:${file}(本地保留 ${KEEP} 份,OSS 仍由生命周期规则管理)"
[[ -n "${file}" ]] || continue
# 上面的 cd 只在命令替换的子 shell 里生效,本循环运行时 cwd 是 PROJECT_ROOT。
# 必须拼上目录再删:只删文件名等于在 PROJECT_ROOT 下找同名文件(不存在),
# rm -f 会静默吞掉错误——这正是本地备份数量一直超出 KEEP 的原因。
rm -f -- "${dir}/${file}"
log "清理本地旧备份:${dir}/${file}(本地保留 ${KEEP} 份,OSS 仍由生命周期规则管理)"
done <<<"${removed}"
}