27 lines
738 B
Bash
27 lines
738 B
Bash
|
|
#!/usr/bin/env bash
|
||
|
|
# Wait for an HTTP service to respond with 2xx.
|
||
|
|
# Usage: wait-for-service.sh <url> [timeout_seconds] [label]
|
||
|
|
set -euo pipefail
|
||
|
|
|
||
|
|
URL="${1:?Usage: wait-for-service.sh <url> [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
|