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

Как создать цикл в bash, который ожидает ответа веб-сервера?

Как создать цикл в bash, который ожидает ответа веб-сервера?

Он должен напечатать "." каждые 10 секунд или около того, и подождите, пока сервер не начнет отвечать.

Обновление, этот код проверяет, получил ли я хороший ответ с сервера.

if curl --output /dev/null --silent --head --fail "$url"; then
  echo "URL exists: $url"
else
  echo "URL does not exist: $url"
fi
4b9b3361

Ответ 1

Объединив вопрос с ответом chepner, это сработало для меня:

until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
    printf '.'
    sleep 5
done

Ответ 2

httping хорош для этого. простой, чистый, тихий.

while ! httping -qc1 http://myhost:myport ; do sleep 1 ; done

пока/до и т.д. является личным префисом.

Ответ 3

Интересная головоломка. Если у вас нет доступа или асинхронного доступа к вашему клиенту, вы можете попробовать grepping сокеты tcp следующим образом:

until grep '***IPV4 ADDRESS OF SERVER IN REVERSE HEX***' /proc/net/tcp
do
  printf '.'
  sleep 1
done

Но это занятое ожидание с интервалом в 1 секунду. Вероятно, вам нужно больше разрешения. Также это глобально. Если на этот сервер добавлено другое соединение, ваши результаты недействительны.

Ответ 4

Использование backticks ` ` устарело. Вместо этого используйте $( ):

until $(curl --output /dev/null --silent --head --fail http://myhost:myport); do
  printf '.'
  sleep 5
done

Ответ 5

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

Ответ 6

если вам нужно проверить, доступен ли сервер, вызвать перезапуск или что-то еще, вы можете попытаться сделать wget на сервере и проанализировать ответ или ошибку, если вы получаете 200 или даже 404, сервер вы можете изменить тайм-аут wget с помощью --timeout = seconds, вы можете установить тайм-аут на 10 секунд и сделать цикл до тех пор, пока результат grep по результату ответа не достигнет результата.

Я не знаю, действительно ли это то, что вы ищете, или действительно вам нужен код bash.