Polling с таймаутом в bash - когда нужно подождать результат, но не вечно. Идеально подходит для:
📍 Ожидания ответа от API;
📍 Проверки, появился ли файл;
📍 Проверки, поднялся ли сервис;
📍 Паузы перед перезапуском, если условие не выполнено.
1️⃣ Пример: ждать файл не больше 10 секунд
TIMEOUT=10
INTERVAL=1
FILE="/tmp/ready.flag"
for ((i=0; i<TIMEOUT; i+=INTERVAL)); do
if [[ -f "$FILE" ]]; then
echo "Файл найден"
break
fi
sleep "$INTERVAL"
done
if [[ ! -f "$FILE" ]]; then
echo "Таймаут: файл не появился"
fi
2️⃣ Пример: проверка доступности порта (через nc)
HOST="localhost"
PORT=8080
TIMEOUT=15
for ((i=0; i<TIMEOUT; i++)); do
if nc -z "$HOST" "$PORT"; then
echo "Сервис доступен"
break
fi
sleep 1
done
if ! nc -z "$HOST" "$PORT"; then
echo "Сервис не запустился за $TIMEOUT секунд"
fi
3️⃣ Более обобщенная функция
poll_until() {
local timeout=$1
local interval=$2
shift 2
local elapsed=0
while ((elapsed < timeout)); do
if "$@"; then
return 0
fi
sleep "$interval"
((elapsed+=interval))
done
return 1
}
▪️Использование:
poll_until 10 1 curl -sf http://localhost:8080/health || echo "Недоступен"
Polling pattern с ограничением по времени - инструмент, когда “ожидание результата” должно быть контролируемым.
BashTex 📱 #bash #utils