Как подождать открытый порт с netcat?
Я пытаюсь сделать пользовательский файл докеров с jenkins на нем. Я бы подождал, пока порт 8080 будет открыт, вместо того, чтобы делать уродливый "sleep 60" с netcat, но не очень уверен в сценариях bash и netcat.
Вот пример того, что я пытаюсь сделать:
#!/bin/bash
opened=0
while [ "$opened" == "0" ]; do
echo "Waiting jenkins to launch on 8080..."
nc -vz localhost 8080
done
echo "Jenkins launched"
Ответы
Ответ 1
Вы не можете установить netcat, чтобы ждать, пока какой-либо порт не будет открыт, поэтому вам нужно добавить часть для ожидания, прежде чем будет произведена следующая проверка. Попробуйте следующее:
#!/bin/bash
echo "Waiting jenkins to launch on 8080..."
while ! nc -z localhost 8080; do
sleep 0.1 # wait for 1/10 of the second before check again
done
echo "Jenkins launched"
Ответ 2
Я обнаружил, что достаточно распространенной проблемой для написания утилиты для ожидания открытия порта с дополнительным таймаутом:
# without timeout
wait-port localhost:8080
# timeout after a minute
wait-port -t 60000 localhost:8080
Он с открытым исходным кодом и доступен в github.com/dwmkerr/wait-port. Надеемся, что другие посчитают это полезным!