58 lines
1.8 KiB
Bash
58 lines
1.8 KiB
Bash
|
|
set -u
|
|||
|
|
DIR=/data/pms/api-server
|
|||
|
|
echo "############ /data/pms/api-server 清理前 ############"
|
|||
|
|
ls -la "$DIR"
|
|||
|
|
echo "--- 目录占用 ---"
|
|||
|
|
du -sh "$DIR"
|
|||
|
|
echo "--- 当前运行中的二进制(绝不能碰)---"
|
|||
|
|
systemctl show -p ExecStart --value pms-api
|
|||
|
|
MAINPID=$(systemctl show -p MainPID --value pms-api)
|
|||
|
|
echo "MainPID=$MAINPID exe=$(readlink -f /proc/$MAINPID/exe 2>/dev/null)"
|
|||
|
|
RUNNING=$(readlink -f /proc/$MAINPID/exe 2>/dev/null)
|
|||
|
|
|
|||
|
|
echo
|
|||
|
|
echo "############ 候选清单(历史二进制,排除当前 pms-api / .env / uploads / exports)############"
|
|||
|
|
# 候选 = 该目录下的普通文件,且名字以 api-server 或 pms-api.bak 开头(严格白名单前缀)
|
|||
|
|
cands=()
|
|||
|
|
for f in "$DIR"/*; do
|
|||
|
|
if [ -f "$f" ]; then
|
|||
|
|
b=$(basename "$f")
|
|||
|
|
case "$b" in
|
|||
|
|
api-server|api-server.bak|api-server_old|pms-api.bak*|api-server*) cands+=( "$f" ) ;;
|
|||
|
|
esac
|
|||
|
|
fi
|
|||
|
|
done
|
|||
|
|
# 按 mtime 从新到旧排序
|
|||
|
|
mapfile -t sorted < <(for f in "${cands[@]}"; do stat -c '%Y %n' "$f"; done | sort -rn | awk '{print $2}')
|
|||
|
|
KEEP=2
|
|||
|
|
echo " 候选(新→旧):"
|
|||
|
|
for f in "${sorted[@]}"; do
|
|||
|
|
echo " $(stat -c '%y %s %n' "$f")"
|
|||
|
|
done
|
|||
|
|
echo " 保留最近 $KEEP 个:"
|
|||
|
|
for ((i=0;i<KEEP && i<${#sorted[@]};i++)); do echo " ${sorted[$i]}"; done
|
|||
|
|
echo " 将删除:"
|
|||
|
|
for ((i=KEEP;i<${#sorted[@]};i++)); do echo " ${sorted[$i]}"; done
|
|||
|
|
|
|||
|
|
echo
|
|||
|
|
echo "############ 执行删除 ############"
|
|||
|
|
for ((i=KEEP;i<${#sorted[@]};i++)); do
|
|||
|
|
f="${sorted[$i]}"
|
|||
|
|
if [ "$(readlink -f "$f")" = "$RUNNING" ]; then
|
|||
|
|
echo " [skip] 正在运行的二进制,拒绝删除: $f"
|
|||
|
|
continue
|
|||
|
|
fi
|
|||
|
|
case "$(basename "$f")" in
|
|||
|
|
pms-api) echo " [skip] 当前二进制 pms-api,拒绝删除"; continue ;;
|
|||
|
|
esac
|
|||
|
|
rm -f -- "$f"
|
|||
|
|
echo " 已删除 $f"
|
|||
|
|
done
|
|||
|
|
|
|||
|
|
echo
|
|||
|
|
echo "############ 清理后 ############"
|
|||
|
|
ls -la "$DIR"
|
|||
|
|
du -sh "$DIR"
|
|||
|
|
echo "--- 服务仍在运行 ---"
|
|||
|
|
systemctl is-active pms-api
|