Files
digital-me-history/.github/workflows/repair-disk.yml
T
admin 0593ff7e62
nginx serve /uploads direct (audio speed) / patch-nginx (push) Failing after 1m34s
数字我 Digital Me:全量入库(大文件走 Git LFS)
2026-10-10 16:24:43 +08:00

51 lines
3.1 KiB
YAML
Executable File

name: Repair Disk (safe cleanup)
# 根分区 100% 满导致 MongoDB 写卡死。只清「可再生垃圾」:失控日志/pm2日志/journal/npm缓存/旧nginx日志。
# 绝不触碰:数据库文件、用户媒体、/var/www 站点、/var/lib/docker、/data。清完测 DB 恢复,必要时只重启本产品 API。
on:
workflow_dispatch:
jobs:
repair:
runs-on: ubuntu-latest
steps:
- name: SSH safe disk cleanup + verify recovery
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.ECS_HOST }}
username: ${{ secrets.ECS_USER }}
password: ${{ secrets.ECS_PASSWORD }}
command_timeout: 10m
script: |
echo "========== 清理前 df =========="; df -h / | tail -1
echo "========== 1) 截断失控的超大 pm2 stdout 日志(>500M,只清空不删文件) =========="
for f in ~/.pm2/logs/*.log; do
[ -f "$f" ] || continue
sz=$(stat -c%s "$f" 2>/dev/null || echo 0)
if [ "$sz" -gt 524288000 ]; then echo " 清空 $(du -h "$f" | cut -f1) $f"; : > "$f"; fi
done
echo "========== 2) pm2 flush(清其余各产品日志) =========="
pm2 flush 2>/dev/null && echo " pm2 flush done" || echo " (pm2 flush 跳过)"
echo "========== 3) journal 收缩到 100M =========="
journalctl --vacuum-size=100M 2>&1 | tail -2 || echo " (无 journalctl)"
echo "========== 4) npm 缓存清理(可再生) =========="
npm cache clean --force 2>/dev/null && echo " npm cache cleaned" || echo " (npm cache 跳过)"
echo "========== 5) 旧的 rotated nginx 日志(*.gz / *.N) =========="
find /var/log/nginx -type f \( -name "*.gz" -o -regex ".*\.[0-9]+" \) -delete 2>/dev/null && echo " 旧 nginx 日志已清" || echo " (无)"
echo "========== 清理后 df =========="; df -h / | tail -1
echo "========== 6) MongoDB ping =========="
if command -v mongosh >/dev/null; then timeout 10 mongosh --quiet --eval "db.adminCommand('ping')" 2>&1 | head -4; \
elif command -v mongo >/dev/null; then timeout 10 mongo --quiet --eval "db.adminCommand('ping')" 2>&1 | head -4; \
else echo " (无 mongo 客户端,跳过 ping)"; fi
echo "========== 7) 本地读库接口测试(10s) =========="
curl -s -m 10 -o /dev/null -w " plaza -> code=%{http_code} time=%{time_total}s\n" http://localhost:3603/api/plaza 2>&1
CODE=$(curl -s -m 10 -o /dev/null -w "%{http_code}" http://localhost:3603/api/plaza 2>/dev/null)
if [ "$CODE" != "200" ]; then
echo "========== 8) plaza 仍非200,重启本产品 API 清连接池 =========="
pm2 restart digitalme-api --update-env 2>/dev/null | tail -3; sleep 7
curl -s -m 15 -o /dev/null -w " plaza(重启后) -> code=%{http_code} time=%{time_total}s\n" http://localhost:3603/api/plaza 2>&1
else
echo " ✓ 读库接口已恢复 200,无需重启"
fi
echo "========== 完成 =========="