#!/usr/bin/env bash # Wait for an HTTP service to respond with 2xx. # Usage: wait-for-service.sh [timeout_seconds] [label] set -euo pipefail URL="${1:?Usage: wait-for-service.sh [timeout_seconds] [label]}" TIMEOUT="${2:-120}" LABEL="${3:-$URL}" INTERVAL=5 ATTEMPTS=$((TIMEOUT / INTERVAL)) if (( ATTEMPTS < 1 )); then ATTEMPTS=1; fi for i in $(seq 1 "$ATTEMPTS"); do if curl -sf --max-time 3 "$URL" > /dev/null 2>&1; then echo "[wait] $LABEL healthy after $((i * INTERVAL))s" exit 0 fi echo "[wait] ($i/$ATTEMPTS) $LABEL not ready..." sleep "$INTERVAL" done echo "[wait] ERROR: $LABEL not healthy after ${TIMEOUT}s" echo "--- Diagnostic: $URL ---" curl -v --max-time 5 "$URL" 2>&1 | head -20 || true exit 1