Ответ 1
Объединив вопрос с ответом chepner, это сработало для меня:
until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
printf '.'
sleep 5
done
Как создать цикл в bash, который ожидает ответа веб-сервера?
Он должен напечатать "." каждые 10 секунд или около того, и подождите, пока сервер не начнет отвечать.
Обновление, этот код проверяет, получил ли я хороший ответ с сервера.
if curl --output /dev/null --silent --head --fail "$url"; then echo "URL exists: $url" else echo "URL does not exist: $url" fi
Объединив вопрос с ответом chepner, это сработало для меня:
until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
printf '.'
sleep 5
done
httping хорош для этого. простой, чистый, тихий.
while ! httping -qc1 http://myhost:myport ; do sleep 1 ; done
пока/до и т.д. является личным префисом.
Интересная головоломка. Если у вас нет доступа или асинхронного доступа к вашему клиенту, вы можете попробовать grepping сокеты tcp следующим образом:
until grep '***IPV4 ADDRESS OF SERVER IN REVERSE HEX***' /proc/net/tcp
do
printf '.'
sleep 1
done
Но это занятое ожидание с интервалом в 1 секунду. Вероятно, вам нужно больше разрешения. Также это глобально. Если на этот сервер добавлено другое соединение, ваши результаты недействительны.
Использование backticks ` `
устарело. Вместо этого используйте $( )
:
until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
printf '.'
sleep 5
done
wait-on
- это кросс-платформенная утилита командной строки и Node.js API, которая будет ждать появления файлов, портов, сокетов и http (ов) ресурсов: https://github.com/jeffbski/wait-on
Например, подождите: 8080 за 5 секунд и выполните NEXT_CMD, если это произойдет.
wait-on -t 5000 http-get://localhost:8080/foo && NEXT_CMD
если вам нужно проверить, доступен ли сервер, вызвать перезапуск или что-то еще, вы можете попытаться сделать wget на сервере и проанализировать ответ или ошибку, если вы получаете 200 или даже 404, сервер вы можете изменить тайм-аут wget с помощью --timeout = seconds, вы можете установить тайм-аут на 10 секунд и сделать цикл до тех пор, пока результат grep по результату ответа не достигнет результата.
Я не знаю, действительно ли это то, что вы ищете, или действительно вам нужен код bash.