Bash / Shell
Ожидание доступности сервиса
Проверка порта или 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 "$@"