Enviar email dependendo do sucesso do comando curl

0

Eu criei um script para monitorar e ter uma consulta como abaixo: -

httpUrl="http://some.website.ashx"
balExp=$(curl -v -X POST -d "UID=test&PWD=2222" $httpUrl) 

Como faço para enviar um alerta por e-mail (meu e-mail, por exemplo), se a consulta não retornar nada ou expirar?

Atualização:

Eu modifiquei o script para executar a consulta

if [ $balExp -eq 0 ]
    echo "Success"
else 
    echo "failed"
fi

Eu sempre falho, mas o comando curl retorna sucesso (0).

    
por Asif 20.05.2015 / 04:18

1 resposta

2

Curl código de saída para solicitações HTTP com falha

Normalmente, se um recurso HTTP solicitado não estiver disponível, um servidor da Web responderá com um documento HTML correspondente ao código de status HTTP relevante, por exemplo, 404. Nesses casos, o curl aceita esse documento do servidor e, como conseguiu obter uma resposta do servidor da Web, exibe o documento de erro e sai com um status 0 para obter êxito.

Você deseja que curl retorne um código de erro se houver um problema ao recuperar o recurso HTTP. Para isso, você precisa fornecer a opção -f, --fail para curl. A partir da página do manual curl:

Fail silently (no output at all) on server errors. This is mostly done to better enable scripts etc to better deal with failed attempts. In normal cases when an HTTP server fails to deliver a document, it returns an HTML document stating so (which often also describes why and more). This flag will prevent curl from outputting that and return error 22.

This method is not fail-safe and there are occasions where non-successful response codes will slip through, especially when authentication is involved (response codes 401 and 407).

Nota: o texto acima é (principalmente) copiado da minha resposta para sua pergunta semelhante sobre o curl .

Enviando e-mail

Você pode usar o programa mail para enviar e-mail. Em sistemas baseados em Debian, ele pode ser instalado através do pacote mailutils enquanto estiver nas distribuições baseadas no Red Hat, é fornecido pelo pacote mailx .

echo "Body of email" | mail [email protected] -s "Subject line"

Se você já usa um cliente de e-mail da linha de comando, como mutt , pode usar:

echo "Body of email" | mutt [email protected] -s "Subject line"

Testando o sucesso de um comando

Ao testar a saída de um comando, você não precisa usar test ou [ . Você pode simplesmente usar a saída do comando como no script a seguir (que incorpora todos os itens acima):

httpUrl="http://some.website.ashx"
if balExp=$(curl -f -v -X POST -d "UID=test&PWD=2222" "$httpUrl"); then
    echo "$balExp" | mail [email protected] -s "Successful download of $httpUrl"
else 
    echo "$balExp" | mail [email protected] -s "Problem downloading $httpUrl"
fi

Note que eu citei a variável shell, $httpUrl usando aspas duplas para que o script trabalhe com outras URLs que podem conter caracteres que são interpretados pelo shell ( & sendo um comum). / p>

Por fim, a declaração if em sua pergunta não continha o then correspondente.

    
por 28.05.2015 / 11:40