install.sh 2.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  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. install -m 755 "$SCRIPT_DIR/health-push.py" /usr/local/bin/health-push.py
  33. # 3. 状态目录
  34. mkdir -p /var/lib/health-monitor /var/log
  35. # 4. cron (每 5 分钟,错开 :03 避开整点)
  36. cat > /etc/cron.d/health-monitor <<'EOF'
  37. # 健康监控:每 5 分钟(错开 :03)检测 /health + /api/navigation/config
  38. # 失败连续 2 次才告警,同一故障 30 分钟内只发一次
  39. SHELL=/bin/bash
  40. PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
  41. MAILTO=""
  42. 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
  43. EOF
  44. chmod 644 /etc/cron.d/health-monitor
  45. # 5. 立即跑一次 dry-run(用真实凭证)验证通路
  46. echo ""
  47. echo "=== 安装完成,立即跑一次 smoke test ==="
  48. bash /usr/local/bin/health-monitor.sh
  49. echo ""
  50. echo "退出码: $?"
  51. echo "日志: tail -20 /var/log/health-monitor.log"
  52. echo ""
  53. echo "查看 cron: cat /etc/cron.d/health-monitor"
  54. echo "手动触发: bash /usr/local/bin/health-monitor.sh"
  55. echo "测试告警: pm2 stop server && bash /usr/local/bin/health-monitor.sh"