数据解析模块
Nevar pievienot vairāk kā 25 tēmas Tēmai ir jāsākas ar burtu vai ciparu, tā var saturēt domu zīmes ('-') un var būt līdz 35 simboliem gara.

health-check.sh 1.7KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. #!/bin/bash
  2. # IoT Platform 健康检查脚本
  3. # 用法: ./health-check.sh [host] [port] [max_wait_seconds]
  4. # 返回: 0=健康, 1=不健康
  5. #
  6. # 检查策略:
  7. # 1. 优先检查 /actuator/health (Spring Boot Actuator)
  8. # 2. 如果 Actuator 返回 404,降级为检查 TCP 端口是否监听
  9. # 3. 如果连端口都没监听,则判定为不健康
  10. HOST=${1:-localhost}
  11. PORT=${2:-8887}
  12. MAX_WAIT=${3:-30}
  13. HEALTH_URL="http://${HOST}:${PORT}/actuator/health"
  14. INTERVAL=2
  15. ATTEMPTS=$((MAX_WAIT / INTERVAL))
  16. echo "[health-check] 开始检查: ${HOST}:${PORT}, 最多等待 ${MAX_WAIT} 秒"
  17. for i in $(seq 1 $ATTEMPTS); do
  18. # 策略1: Actuator 健康端点
  19. RESPONSE=$(curl -s -o /dev/null -w "%{http_code}" --connect-timeout 2 --max-time 3 "${HEALTH_URL}" 2>/dev/null)
  20. if [ "$RESPONSE" = "200" ]; then
  21. BODY=$(curl -s --connect-timeout 2 --max-time 3 "${HEALTH_URL}" 2>/dev/null)
  22. if echo "$BODY" | grep -q '"status":"UP"'; then
  23. echo "[health-check] Actuator 健康检查通过 (${i}/${ATTEMPTS})"
  24. exit 0
  25. fi
  26. fi
  27. # 策略2: 如果 Actuator 404,降级为端口监听检查
  28. if [ "$RESPONSE" = "404" ]; then
  29. if nc -z "${HOST}" "${PORT}" 2>/dev/null || \
  30. ss -tlnp 2>/dev/null | grep -q ":${PORT} " || \
  31. netstat -tlnp 2>/dev/null | grep -q ":${PORT} "; then
  32. echo "[health-check] 端口监听检查通过 (${i}/${ATTEMPTS}) [Actuator 未启用,使用端口降级检查]"
  33. exit 0
  34. fi
  35. fi
  36. echo "[health-check] 第 ${i}/${ATTEMPTS} 次检查未通过 (HTTP ${RESPONSE}), ${INTERVAL} 秒后重试..."
  37. sleep $INTERVAL
  38. done
  39. echo "[health-check] 健康检查失败: 服务未在 ${MAX_WAIT} 秒内就绪"
  40. exit 1