50 lines
4.1 KiB
YAML
Executable File
50 lines
4.1 KiB
YAML
Executable File
name: Cleanup + Disk Guard + claw source
|
|
|
|
# A) 读 claw-api(aiplatform-api) 源码定位「反复重载 CustomApps」根因
|
|
# B) 安全清理可再生空间(conda 包缓存 / docker 悬空镜像 / dnf 缓存 / npm 缓存)——不碰 docker 卷、/data、媒体
|
|
# C) 装磁盘看门狗 cron:根盘>=90% 自动清失控日志,防再次满盘全站瘫
|
|
on:
|
|
workflow_dispatch:
|
|
|
|
jobs:
|
|
cleanup:
|
|
runs-on: ubuntu-latest
|
|
steps:
|
|
- name: SSH cleanup + guard + claw scan
|
|
uses: appleboy/ssh-action@v1
|
|
with:
|
|
host: ${{ secrets.ECS_HOST }}
|
|
username: ${{ secrets.ECS_USER }}
|
|
password: ${{ secrets.ECS_PASSWORD }}
|
|
command_timeout: 12m
|
|
script: |
|
|
D=/var/www/aiplatform-api.invoratec.cn
|
|
echo "############ A. claw-api 反复重载 CustomApps 根因(读源码) ############"
|
|
echo "=== 打印该日志的源码位置 ==="
|
|
grep -rn "CustomApps" "$D/src" 2>/dev/null | grep -iE "Loaded|log|console" | grep -v node_modules | head -5
|
|
echo "=== 谁触发重载(setInterval/fs.watch/chokidar/reload/loadAll/每请求加载) ==="
|
|
grep -rniE "setInterval|fs\.watch|chokidar|reloadApps|loadCustomApps|loadAllApps|loadApps\(|scanApps|refreshApps" "$D/src" 2>/dev/null | grep -v node_modules | head -20
|
|
echo "=== .env 是否有 LOG_LEVEL/DEBUG 可降噪 ==="
|
|
grep -iE "LOG_LEVEL|LOG_|DEBUG|VERBOSE|NODE_ENV" "$D/.env" 2>/dev/null | sed -E 's/=.*/=***/' | head
|
|
echo ""
|
|
echo "############ B. 安全清理(仅可再生垃圾) ############"
|
|
echo "=== before ==="; df -h / | tail -1
|
|
echo "--- conda 包缓存 ---"
|
|
if [ -x /opt/miniconda3/bin/conda ]; then /opt/miniconda3/bin/conda clean -a -y 2>&1 | tail -4; else echo "(无 conda)"; fi
|
|
echo "--- docker 悬空镜像(只清 dangling,安全) ---"
|
|
(command -v docker >/dev/null && docker image prune -f 2>&1 | tail -2) || echo "(无 docker)"
|
|
echo "--- dnf 缓存 ---"
|
|
(command -v dnf >/dev/null && dnf clean all 2>&1 | tail -1) || true
|
|
echo "--- npm 缓存 ---"
|
|
npm cache clean --force 2>/dev/null && echo "npm cache cleaned" || true
|
|
echo "=== after ==="; df -h / | tail -1
|
|
echo ""
|
|
echo "############ C. 装磁盘看门狗 cron ############"
|
|
echo 'IyEvYmluL2Jhc2gKIyDno4Hnm5jnnIvpl6jni5fvvJrmoLnliIbljLogPj05MCUg5pe257Sn5oCl5riF56m65aSx5o6nIHBtMiDml6Xlv5cgKyDmlLbnvKkgam91cm5hbO+8jOiusOW9leWIsCAvdmFyL2xvZy9kaXNrLWd1YXJkLmxvZ+OAggojIOeUsSBjcm9uIOavjyAxMCDliIbpkp/ot5HkuIDmrKHjgILpmLLmraLlho3mrKHmu6Hnm5jlr7zoh7QgbW9uZ29kIOatu+OAgeWFqOermeeYq+OAggpUSFJFU0g9OTAKVVNFPSQoZGYgLyB8IGF3ayAnTlI9PTJ7Z3N1YigiJSIsIiIsJDUpO3ByaW50ICQ1fScpCkxPRz0vdmFyL2xvZy9kaXNrLWd1YXJkLmxvZwpbICIke1VTRTotMH0iIC1sdCAiJFRIUkVTSCIgXSAmJiBleGl0IDAKZWNobyAiJChkYXRlICcrJUYgJVQnKSBkaXNrICR7VVNFfSUgPj0gJHtUSFJFU0h9JSAtPiBlbWVyZ2VuY3kgY2xlYW51cCIgPj4gIiRMT0ciCmZvciBkIGluIC9yb290Ly5wbTIvbG9ncyAvaG9tZS8qLy5wbTIvbG9ncyAiJEhPTUUvLnBtMi9sb2dzIjsgZG8KICBmb3IgZiBpbiAiJGQiLyoubG9nOyBkbwogICAgWyAtZiAiJGYiIF0gfHwgY29udGludWUKICAgIHN6PSQoc3RhdCAtYyVzICIkZiIgMj4vZGV2L251bGwgfHwgZWNobyAwKQogICAgaWYgWyAiJHN6IiAtZ3QgMjA5NzE1MjAwIF07IHRoZW4gZWNobyAiICB0cnVuY2F0ZSAkZiAoJCgoc3ovMTA0ODU3NikpTSkiID4+ICIkTE9HIjsgOiA+ICIkZiI7IGZpCiAgZG9uZQpkb25lCmpvdXJuYWxjdGwgLS12YWN1dW0tc2l6ZT0xMDBNID4+ICIkTE9HIiAyPiYxCmVjaG8gIiAgYWZ0ZXI6ICQoZGYgLWggLyB8IGF3ayAnTlI9PTJ7cHJpbnQgJDUiIHVzZWQsICIkNCIgZnJlZSJ9JykiID4+ICIkTE9HIgo=' | base64 -d > /usr/local/bin/disk-guard.sh
|
|
chmod +x /usr/local/bin/disk-guard.sh
|
|
( crontab -l 2>/dev/null | grep -v 'disk-guard.sh'; echo '*/10 * * * * /usr/local/bin/disk-guard.sh' ) | crontab -
|
|
systemctl enable --now crond 2>/dev/null || systemctl enable --now cron 2>/dev/null || true
|
|
echo "cron 已注册:"; crontab -l 2>/dev/null | grep disk-guard || echo " ⚠ 未见 cron 条目"
|
|
echo "看门狗立即空跑一次(当前<90%应无动作):"; /usr/local/bin/disk-guard.sh; echo " exit=$?"
|
|
echo "############ 完成 ############"
|