install.sh 2.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. #!/bin/bash
  2. # install.sh — 部署健康监控到服务器
  3. #
  4. # 用法(在服务器上 root 跑):
  5. # cd /tmp && tar xzf health-monitor.tar.gz && cd health-monitor && bash install.sh
  6. #
  7. # 前置条件:
  8. # 1. /etc/health-monitor.env 已存在并填好 QQ_AUTH_CODE(参考 health-monitor.env.example)
  9. set -e
  10. if [ "$(id -u)" -ne 0 ]; then
  11. echo "必须 root 运行" >&2
  12. exit 1
  13. fi
  14. SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
  15. # 1. 凭证
  16. if [ ! -f /etc/health-monitor.env ]; then
  17. echo "ERROR: /etc/health-monitor.env 不存在,请按以下步骤创建:" >&2
  18. echo " cp $SCRIPT_DIR/health-monitor.env.example /etc/health-monitor.env" >&2
  19. echo " vim /etc/health-monitor.env # 填入 QQ_AUTH_CODE" >&2
  20. echo " chmod 600 /etc/health-monitor.env" >&2
  21. exit 1
  22. fi
  23. chmod 600 /etc/health-monitor.env
  24. # 检查 QQ_AUTH_CODE 是否还是占位符
  25. if grep -q 'QQ_AUTH_CODE=把你的' /etc/health-monitor.env; then
  26. echo "ERROR: /etc/health-monitor.env 还是占位符,请填入真实 QQ 邮箱授权码" >&2
  27. exit 1
  28. fi
  29. # 2. 主脚本
  30. install -m 755 "$SCRIPT_DIR/health-monitor.sh" /usr/local/bin/health-monitor.sh
  31. install -m 755 "$SCRIPT_DIR/health-send-mail.py" /usr/local/bin/health-send-mail.py
  32. # 3. 状态目录
  33. mkdir -p /var/lib/health-monitor /var/log
  34. # 4. cron (每 5 分钟,错开 :03 避开整点)
  35. cat > /etc/cron.d/health-monitor <<'EOF'
  36. # 健康监控:每 5 分钟(错开 :03)检测 /health + /api/navigation/config
  37. # 失败连续 2 次才告警,同一故障 30 分钟内只发一次
  38. SHELL=/bin/bash
  39. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  40. MAILTO=""
  41. 3,8,13,18,23,28,33,38,43,48,53,58 * * * * root /usr/local/bin/health-monitor.sh >> /var/log/health-monitor.log 2>&1
  42. EOF
  43. chmod 644 /etc/cron.d/health-monitor
  44. # 5. 立即跑一次 dry-run(用真实凭证)验证通路
  45. echo ""
  46. echo "=== 安装完成,立即跑一次 smoke test ==="
  47. bash /usr/local/bin/health-monitor.sh
  48. echo ""
  49. echo "退出码: $?"
  50. echo "日志: tail -20 /var/log/health-monitor.log"
  51. echo ""
  52. echo "查看 cron: cat /etc/cron.d/health-monitor"
  53. echo "手动触发: bash /usr/local/bin/health-monitor.sh"
  54. echo "测试告警: pm2 stop server && bash /usr/local/bin/health-monitor.sh"