Como criar um loop no bash que está esperando a resposta de um servidor web?
Deve imprimir um "." a cada 10 segundos ou mais e aguarde até que o servidor comece a responder.
Update, este código testa se obtenho uma boa resposta do servidor.
if curl --output / dev / null --silent --head --fail "$ url"; então echo "URL existe: $ url" outro echo "URL não existe: $ url" fi
Respostas:
Combinando a pergunta com a resposta do chepner, funcionou para mim:
fonte
$( )
lugar.--head
?--head
não mudaria nada, mas você poderia se quiser exercitar alguma lógica no conteúdo da resposta (como um status.html).--head
sempre voltou405
. Tive que removê-lo para que funcionasseEu queria limitar o número máximo de tentativas. Com base na resposta aceita de Thomas, fiz o seguinte:
fonte
--max-time 5
se por algum motivo o link solicitado expirarHttping é bom para isso. simples, limpo, silencioso.
enquanto / até etc é uma preferência pessoal.
fonte
for i in
seq 60; do httping -qc1 http://myhost:myport && echo && break sleep 5 echo -n ${i}.. done
O uso de backticks
` `
está desatualizado . Use em seu$( )
lugar:fonte
Quebra-cabeça interessante. Se você não tem acesso ou api assíncrono com seu cliente, você pode tentar executar grep em seus sockets tcp desta forma:
Mas essa é uma espera ocupada com intervalos de 1 segundo. Você provavelmente quer mais resolução do que isso. Também isso é global. Se outra conexão for feita com esse servidor, seus resultados serão inválidos.
fonte
se precisar verificar se o servidor está disponível, a causa está reiniciando ou outra coisa, você pode tentar fazer um wget para o servidor e analisar a resposta ou o erro, se você obtiver 200 ou mesmo 404 o servidor está ativo, você poderia alterar o tempo limite do wget com --timeout = segundos, Você poderia definir o tempo limite para 10 segundos e fazer um loop até que o grep sobre a resposta tivesse um resultado.
Não sei se é isso que você está procurando ou se realmente precisa do código bash.
fonte