Иногда перед deploy, миграцией или запуском сервиса нужно убедиться, что база, Redis, брокер или внутренний API вообще доступны по сети.
Сделаем маленький скрипт без curl и nc. В Bash можно открыть TCP-соединение через /dev/tcp.
Сначала зададим host и port:
host="db.internal"
port="5432"
Проверка выглядит так:
if timeout 3 bash -c "</dev/tcp/$host/$port"; then
echo "open"
fi
timeout нужен, чтобы скрипт не завис надолго, если сеть молчит или firewall просто дропает пакеты.
Добавим ветку для ошибки:
else
echo "closed"
exit 1
fi
Теперь это можно использовать перед командой запуска:
./wait-port.sh db.internal 5432
./run-migrations.sh
Для CI удобно сделать параметры из аргументов:
host="$1"
port="$2"
Такой скрипт не заменяет полноценный healthcheck, но хорошо подходит для быстрых проверок зависимостей в deploy pipeline и init-скриптах.
➡️ DevOps Ready | #практика