ci: 归档 ECS 专用工作流;新增 NAS 自动部署流水线
This commit is contained in:
+49
@@ -0,0 +1,49 @@
|
||||
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 "############ 完成 ############"
|
||||
Reference in New Issue
Block a user