数字我 Digital Me:全量入库(大文件走 Git LFS)
nginx serve /uploads direct (audio speed) / patch-nginx (push) Failing after 1m34s
nginx serve /uploads direct (audio speed) / patch-nginx (push) Failing after 1m34s
This commit is contained in:
Executable
+50
@@ -0,0 +1,50 @@
|
||||
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 "========== 完成 =========="
|
||||
Reference in New Issue
Block a user