Подтвердить что ты не робот

Как подождать открытый порт с 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"
4b9b3361

Ответ 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. Надеемся, что другие посчитают это полезным!