Как создать цикл в bash, который ожидает ответа веб-сервера?
Он должен напечатать "." каждые 10 секунд или около того и ждите, пока сервер не начнет отвечать.
Обновите, этот код проверяет, получаю ли я хороший ответ от сервера.
если curl --output / dev / null --silent --head --fail "$ url"; затем echo "URL существует: $ url" еще echo "URL не существует: $ url" фи
Ответы:
Объединив вопрос с ответом Чепнера, это сработало для меня:
источник
$( )
Вместо этого используйте .--head
?--head
ничего не изменит, но вы можете, если хотите поработать логику с содержимым ответа (например, status.html).--head
всегда возвращалось405
. Пришлось удалить его, чтобы он заработалЯ хотел ограничить максимальное количество попыток. Основываясь на принятом ответе Томаса, я сделал следующее:
источник
--max-time 5
если по каким-либо причинам время ожидания ссылки истеклоhttping подходит для этого. просто, чисто, тихо.
while / until etc - личная прив.
источник
for i in
seq 60; do httping -qc1 http://myhost:myport && echo && break sleep 5 echo -n ${i}.. done
Использование обратных кавычек
` `
является устаревшим .$( )
Вместо этого используйте :источник
Интересная головоломка. Если у вас нет доступа или асинхронного API с вашим клиентом, вы можете попробовать использовать grep для своих сокетов tcp следующим образом:
Но это занятое ожидание с интервалом в 1 секунду. Вы, вероятно, хотите большего разрешения, чем это. Также это глобально. Если к этому серверу установлено другое соединение, ваши результаты недействительны.
источник
если вам нужно проверить, доступен ли сервер, причиной является перезапуск или что-то еще, вы можете попытаться сделать wget на сервере и проанализировать ответ или ошибку, если вы получите 200 или даже 404, сервер работает, вы можно изменить тайм-аут wget с помощью --timeout = seconds, вы можете установить тайм-аут на 10 секунд и сделать цикл, пока grep по ответу не даст результат.
я не знаю, это то, что вы ищете, или вам действительно нужен код bash.
источник