Files

55 lines
3.8 KiB
YAML
Executable File

name: Diagnose Cleanup + claw-api (read-only)
# 只读:①查 claw-api 疯狂刷日志的根因 ②盘点还能安全清理的空间。不删任何东西。
on:
workflow_dispatch:
jobs:
scan:
runs-on: ubuntu-latest
steps:
- name: SSH read-only scan
uses: appleboy/ssh-action@v1
with:
host: ${{ secrets.ECS_HOST }}
username: ${{ secrets.ECS_USER }}
password: ${{ secrets.ECS_PASSWORD }}
command_timeout: 9m
script: |
echo "###################### 一、claw-api 刷日志根因 ######################"
echo "===== pm2 describe claw-api ====="
pm2 describe claw-api 2>/dev/null | grep -iE "status|restart|uptime|script path|exec cwd|pid|unstable" | head -12
echo "===== claw-api 日志当前大小(截断后是否又涨) ====="
ls -lh ~/.pm2/logs/claw-api-out.log ~/.pm2/logs/claw-api-error.log 2>/dev/null
echo "===== out.log 最近 30 行(它在打印啥) ====="
tail -30 ~/.pm2/logs/claw-api-out.log 2>/dev/null | cut -c1-240
echo "===== out.log 最重复的 15 种行(定位刷屏内容) ====="
tail -4000 ~/.pm2/logs/claw-api-out.log 2>/dev/null | sed -E 's/[0-9]{4}-[0-9:.TZ -]+//g; s/[0-9]+/N/g' | sort | uniq -c | sort -rn | head -15 | cut -c1-200
echo "===== error.log 最近 20 行 ====="
tail -20 ~/.pm2/logs/claw-api-error.log 2>/dev/null | cut -c1-240
echo ""
echo "###################### 二、还能安全清理什么 ######################"
echo "===== df ====="; df -h / | tail -1
echo "===== docker 可回收(images/build cache/volumes) ====="
(command -v docker >/dev/null && docker system df 2>/dev/null) || echo "(无 docker)"
echo " --- dangling 悬空镜像 ---"; (command -v docker >/dev/null && docker images -f dangling=true -q 2>/dev/null | wc -l | xargs echo " 悬空镜像数=") || true
echo "===== 包管理器缓存 ====="
du -sh /var/cache/apt 2>/dev/null; du -sh /var/cache/yum 2>/dev/null; du -sh /var/cache/dnf 2>/dev/null
echo "===== conda 包缓存(可 conda clean) ====="; du -sh /opt/miniconda3/pkgs 2>/dev/null
echo "===== 各种 cache / pm2日志 / journal ====="
du -sh ~/.cache 2>/dev/null; du -sh ~/.npm 2>/dev/null; du -sh ~/.pm2/logs 2>/dev/null; journalctl --disk-usage 2>/dev/null
echo "===== 旧构建备份 / 我留的 .dmbak / *.bak / dist.old ====="
ls -lh /etc/nginx/conf.d/*.dmbak 2>/dev/null
find /var/www -maxdepth 3 -type d \( -name "dist.old" -o -name "*.bak" -o -name "backup" \) 2>/dev/null | head
find /var/www -maxdepth 3 -type f \( -name "*.bak" -o -name "*.tar.gz" -o -name "*.zip" \) -size +50M 2>/dev/null -printf '%s\t%p\n' | sort -rn | head -10 | awk '{printf " %.2fG\t%s\n",$1/1073741824,$2}'
echo "===== /data/iot 里是否有 logs/node_modules/缓存(可清) ====="
du -xh --max-depth=2 /data/iot 2>/dev/null | sort -rh | head -12
find /data/iot -maxdepth 3 -type d -name node_modules 2>/dev/null -printf '%p\n' | head -8
echo "===== 其它 >100M 的 .log(别的失控日志) ====="
find / -xdev -type f -name "*.log" -size +100M 2>/dev/null -printf '%s\t%p\n' | sort -rn | head -12 | awk '{printf " %.2fG\t%s\n",$1/1073741824,$2}'
echo "===== coredump / crash ====="
du -sh /var/lib/systemd/coredump 2>/dev/null; du -sh /var/crash 2>/dev/null; ls /var/crash 2>/dev/null | head
echo "===== 全盘 Top 25 大目录(复核) ====="
du -xh --max-depth=3 / 2>/dev/null | sort -rh | head -25
echo "###################### 扫描完成 ######################"