Bash / Shell

Ожидание доступности сервиса

Algonexys · 07.08.2026 · 👁 0

Проверка порта или HTTP-эндпоинта с таймаутом — нужно в CI, Docker-entrypoint и деплой-скриптах.

Код

#!/usr/bin/env bash
set -euo pipefail

wait_for_port() {
    local host="$1" port="$2" timeout="${3:-60}" waited=0
    echo "Жду $host:$port…"
    until (exec 3<>"/dev/tcp/$host/$port") 2>/dev/null; do
        (( waited++ >= timeout )) && { echo "Таймаут $host:$port" >&2; return 1; }
        sleep 1
    done
    exec 3>&-
    echo "$host:$port доступен через ${waited} с"
}

wait_for_http() {
    local url="$1" timeout="${2:-60}" waited=0
    until curl -fsS --max-time 3 -o /dev/null "$url"; do
        (( waited++ >= timeout )) && { echo "Таймаут $url" >&2; return 1; }
        sleep 1
    done
    echo "$url отвечает"
}

# Типичный entrypoint контейнера
wait_for_port "${DB_HOST:-localhost}" "${DB_PORT:-5432}" 60
wait_for_port "${RABBITMQ_HOST:-localhost}" 5672 30
exec "$@"