From ce9e9a2d26c80eb57b5855fadd45fdc2004b2258 Mon Sep 17 00:00:00 2001 From: mrfufl4ik Date: Fri, 27 Mar 2026 16:43:31 +0600 Subject: [PATCH] change root --- wait-for-it.sh => wait-for/wait-for-it.sh | 0 wait-for/wait-for-multiply.sh | 54 +++++++++++++++++++++++ 2 files changed, 54 insertions(+) rename wait-for-it.sh => wait-for/wait-for-it.sh (100%) create mode 100644 wait-for/wait-for-multiply.sh diff --git a/wait-for-it.sh b/wait-for/wait-for-it.sh similarity index 100% rename from wait-for-it.sh rename to wait-for/wait-for-it.sh diff --git a/wait-for/wait-for-multiply.sh b/wait-for/wait-for-multiply.sh new file mode 100644 index 0000000..e53fd38 --- /dev/null +++ b/wait-for/wait-for-multiply.sh @@ -0,0 +1,54 @@ +#!/usr/bin/env bash +# wait-for-multiple.sh + +set -e + +# Список хостов передается через аргументы до -- +# Команда после -- +HOSTS=() +CMD=() +while [[ $# -gt 0 ]]; do + case "$1" in + --) + shift + CMD=("$@") + break + ;; + *) + HOSTS+=("$1") + shift + ;; + esac +done + +if [[ ${#HOSTS[@]} -eq 0 ]]; then + echo "Usage: $0 host1:port1 host2:port2 ... -- command args" + exit 1 +fi + +# Функция для wait-for-it +wait_host() { + local hostport=$1 + /usr/bin/wait-for-it.sh "$hostport" --timeout=30 --strict +} + +# Запускаем все ожидания параллельно +PIDS=() +for h in "${HOSTS[@]}"; do + wait_host "$h" & + PIDS+=($!) +done + +# Ждем всех +FAIL=0 +for pid in "${PIDS[@]}"; do + wait $pid || FAIL=1 +done + +if [[ $FAIL -ne 0 ]]; then + echo "One or more hosts failed to become available" + exit 1 +fi + +# Запускаем команду после всех +exec "${CMD[@]}"