Tenho a sensação de que estou perdendo o óbvio, mas não consegui man [curl|wget]
google ("http" faz um termo de pesquisa tão ruim). Estou procurando uma correção rápida e suja para um de nossos servidores da Web que frequentemente falha, retornando o código de status 500 com uma mensagem de erro. Quando isso acontece, ele precisa ser reiniciado.
Como a causa raiz parece difícil de encontrar, estamos buscando uma solução rápida, esperando que seja suficiente para diminuir o tempo até que possamos corrigi-la (o serviço não precisa de alta disponibilidade)
A solução proposta é criar um trabalho cron que seja executado a cada 5 minutos, verificando http: // localhost: 8080 / . Se isso retornar com o código de status 500, o servidor da web será reiniciado. O servidor será reiniciado em menos de um minuto, portanto, não há necessidade de verificar se há reinicializações em execução.
O servidor em questão é uma instalação mínima do ubuntu 8.04 com apenas pacotes suficientes instalados para executar o que ele precisa atualmente. Não há um requisito difícil de executar a tarefa no bash, mas eu gostaria que ela fosse executada em um ambiente tão mínimo sem instalar mais intérpretes.
(Estou suficientemente familiarizado com scripts que o comando / opções para atribuir o código de status http a uma variável de ambiente seria suficiente - é isso que eu procurei e não consegui encontrar.)
fonte
response=$(curl --write-out \\n%{http_code} --silent --output - servername)
- a última linha no resultado será o código de resposta.--insecure
também.trabalho. Caso contrário, você deve pressionar return para visualizar o próprio código.
fonte
Eu precisava demonstrar algo rapidamente hoje e veio com isso. Pensei em colocá-lo aqui se alguém precisasse de algo semelhante à solicitação do OP.
Isso enviará um alerta por e-mail sobre cada alteração de estado de 200, por isso é idiota e potencialmente ganancioso. Para melhorar isso, eu examinaria vários códigos de status e executaria ações diferentes, dependendo do resultado.
fonte
Embora a resposta aceita seja uma boa resposta, ela ignora os cenários de falha.
curl
retornará000
se houver um erro na solicitação ou se houver uma falha na conexão.Nota: isso vai um pouco além da
500
verificação de status solicitada para confirmar também quecurl
pode até se conectar ao servidor (ou seja, retorna000
).Crie uma função a partir dela:
Teste para obter um
500
:Teste para obter erro / falha na conexão (ou seja
000
):Teste não obtendo um
500
:fonte
Com o netcat e o awk, você pode manipular a resposta do servidor manualmente:
fonte
Para seguir os redirecionamentos 3XX e imprimir códigos de resposta para todas as solicitações:
fonte
grep
irá capturar todas as linhas com "HTTP" nelas. Talvezgrep -m 1 HTTP
apenas pegue a primeira partida, se essa for a intenção, ou talvez vá até o Awk para analisar apenas o código do resultado.isso pode ajudar a avaliar o status http
fonte
head -n 1 | awk '{stuff}'
é um pouco antipadrão,awk 'NR==1 {stuff}'
faz a mesma coisa em um processo, o Awk puro.Outra variação:
fonte
Aí vem o script longo, mas fácil de entender, inspirado na solução do nicerobot , que apenas solicita os cabeçalhos de resposta e evita o uso do IFS, conforme sugerido aqui . Ele gera uma mensagem de devolução quando encontra uma resposta> = 400. Esse eco pode ser substituído por um script de devolução.
fonte
Não gostei das respostas aqui que misturam os dados com o status. encontrou o seguinte: você adiciona o sinalizador -f para que a ondulação falhe e escolhe o código de status do erro no status padrão var: $?
/unix/204762/return-code-for-curl-used-in-a-command-substitution
não sei se é perfeito para todos os cenários aqui, mas parece atender às minhas necessidades e acho muito mais fácil trabalhar com
fonte
Aqui está minha implementação, que é um pouco mais detalhada do que algumas das respostas anteriores
fonte
Para adicionar ao @DennisWilliamson, o comentário acima:
Em seguida, você pode analisar o código de resposta da resposta usando algo como o seguinte, em que X pode significar uma regex para marcar o final da resposta (usando um exemplo json aqui)
Consulte Remoção de Substring: http://tldp.org/LDP/abs/html/string-manipulation.html
fonte
echo
para obter o valor final? Justcode=${response##*\}}
é mais simples e evita uma série de armadilhas comuns. Além disso, esse é um padrão global, não uma expressão regular adequada.