guanghulab/server/scripts/health-check.sh
Guanghu Domestic Migration d1e47f4565
Some checks are pending
自动更新代码和重启 / update-and-restart (push) Waiting to run
CI检查 + 自动部署 / check (push) Waiting to run
CI检查 + 自动部署 / deploy (push) Blocked by required conditions
重启聊天服务 / restart (push) Waiting to run
chore: import sanitized domestic snapshot for REPO-002
Source snapshot: ca48d3ddf926d79aa138306164169baf764bb829
2026-07-17 15:54:41 +08:00

75 lines
2.4 KiB
Bash

#!/bin/bash
# ═══════════════════════════════════════════════════════════
# 铸渊服务器健康检查脚本 · Server Health Check
# ═══════════════════════════════════════════════════════════
#
# 由 cron 定时运行,检查所有服务状态
# 建议添加到 crontab: */5 * * * * /opt/zhuyuan/scripts/health-check.sh
#
# 编号: ZY-SVR-HC-001
# 守护: 铸渊 · ICE-GL-ZY001
# ═══════════════════════════════════════════════════════════
set -euo pipefail
ZY_ROOT="/opt/zhuyuan"
BRAIN_DIR="${ZY_ROOT}/brain"
LOG_DIR="${ZY_ROOT}/data/logs"
# ─── §1 检查Node.js应用 ───
APP_STATUS="unknown"
if curl -sf http://localhost:3800/api/health > /dev/null 2>&1; then
APP_STATUS="running"
else
APP_STATUS="down"
# 尝试自愈
pm2 restart zhuyuan-server 2>>"${LOG_DIR}/pm2-recover.log" || \
pm2 start "${ZY_ROOT}/config/pm2/ecosystem.config.js" 2>>"${LOG_DIR}/pm2-recover.log"
sleep 3
if curl -sf http://localhost:3800/api/health > /dev/null 2>&1; then
APP_STATUS="recovered"
fi
fi
# ─── §2 检查Nginx ───
NGINX_STATUS="unknown"
if systemctl is-active --quiet nginx; then
NGINX_STATUS="running"
else
NGINX_STATUS="down"
sudo systemctl restart nginx 2>/dev/null
if systemctl is-active --quiet nginx; then
NGINX_STATUS="recovered"
fi
fi
# ─── §3 磁盘使用 ───
DISK_USAGE=$(df / | awk 'NR==2{print $5}' | tr -d '%')
# ─── §4 内存使用 ───
MEM_TOTAL=$(free -m | awk 'NR==2{print $2}')
MEM_USED=$(free -m | awk 'NR==2{print $3}')
MEM_PCT=$((MEM_USED * 100 / MEM_TOTAL))
# ─── §5 更新大脑健康状态 ───
HEALTH_FILE="${BRAIN_DIR}/health.json"
mkdir -p "${BRAIN_DIR}"
cat > "${HEALTH_FILE}" << HEALTH_JSON
{
"server": "ZY-SVR-002",
"status": "${APP_STATUS}",
"last_check": "$(date -u +%Y-%m-%dT%H:%M:%SZ)",
"services": {
"app": "${APP_STATUS}",
"nginx": "${NGINX_STATUS}"
},
"disk_usage": "${DISK_USAGE}%",
"memory": {
"total_mb": ${MEM_TOTAL},
"used_mb": ${MEM_USED},
"usage_pct": "${MEM_PCT}%"
},
"uptime": "$(uptime -p 2>/dev/null || echo 'unknown')"
}
HEALTH_JSON