diff --git a/scripts/update.sh b/scripts/update.sh index 25b0d95..602afe8 100755 --- a/scripts/update.sh +++ b/scripts/update.sh @@ -740,6 +740,33 @@ fi # --------------------------------------------------------------------------- log "检查 WebSocket 连通性" +# `docker compose up -d` 只表示容器进程已创建,不能证明 Spring 已完成启动。 +# IM 首次启动通常晚于 tenant-service;必须先等待 HTTP 路由脱离 502,再做 +# WebSocket 与全量业务检查,避免把正常启动窗口误报为部署故障。 +if profile_contains "$_ACTIVE_PROFILES" "im"; then + printf ' 等待 im-service 就绪' + _im_ready=0 + for i in $(seq 1 40); do + _im_code="$(curl -sk --noproxy '*' -o /dev/null -w '%{http_code}' --max-time 4 \ + "http://127.0.0.1:${_NGINX_PORT}/api/im/platform-events/token?appKey=health-probe" \ + 2>/dev/null || echo 000)" + case "$_im_code" in + 200|400|401|403|404) + printf '\n' + ok "im-service 路由已就绪 (HTTP ${_im_code})" + _im_ready=1 + break + ;; + esac + printf '.' + sleep 3 + done + if [ "$_im_ready" -eq 0 ]; then + printf '\n' + warn "im-service 在 120s 内未就绪,请检查: docker compose logs --tail 60 im-service" + fi +fi + # 从服务器本地探测容器 nginx 的 /ws/im 升级握手是否正常 # 正常响应:HTTP 101 Switching Protocols;异常:400 / 连接拒绝等 _ws_probe="$(curl -sk --noproxy '*' --max-time 5 \