カールコマンドの成功に応じてメールを送信する

カールコマンドの成功に応じてメールを送信する

次のクエリを監視および作成するためのスクリプトを作成しました。

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

クエリが何も返さない場合やタイムアウトした場合は、どのように電子メール通知(たとえば、私の電子メール)を送信できますか?

修正する:

クエリを実行するようにスクリプトを変更しました。

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

私はいつも失敗しますが、curlコマンドは成功(0)を返します。

答え1

失敗した HTTP 要求の Curl 終了コード

通常、要求されたHTTPリソースが利用できない場合、Webサーバーは関連するHTTPステータスコード(404など)に対応するHTML文書で応答します。この場合、カールはサーバーから文書を受け取り、Webサーバーから正常に応答を受けたため、エラー文書を表示し、成功を示すためにステータス0で終了します。

curlHTTPリソースの取得に問題がある場合は、エラーコードを返したいと思います。これを行うには、-f, --failカールオプションを指定する必要があります。カールのマニュアルページから:

サーバーエラーが発生すると自動的に失敗します(出力なし)。これは主に、失敗した試みをよりよく処理するためにスクリプトなどをより有効にするために行われます。通常の状況でHTTPサーバーが文書を渡すことができない場合は、状況を説明するHTML文書を返します(通常、理由と追加情報も説明します)。このフラグはカールがこの内容を出力しないようにし、エラー22を返します。

この方法は安全ではなく、特に認証が関連している場合は失敗した応答コード(応答コード401と407)を見逃すことがあります。

メモ:上記は(ほとんど)私の答えからコピーされました。カールに関する同様の質問

メールを送信

mailこのプログラムを使用して電子メールを送信できます。 Debianベースのシステムではソフトウェアパッケージを介してインストールできますが、mailutilsRed Hatベースのディストリビューションではソフトウェアパッケージを介して提供されますmailx

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

たとえば、すでにコマンドラインメールクライアントを使用している場合は、次のものをmutt使用できます。

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

コマンドが成功したかテスト

testコマンドの出力をテストするときや使用する必要はありません[。次のスクリプトのように、コマンド出力を簡単に使用できます(上記のすべてを含む)。

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

$httpUrlシェルで解釈される文字(&共通文字)を含む可能性がある他のURLでスクリプトを使用できるように、二重引用符を使用してシェル変数を引用しました。

最後に、ifあなたの質問に対応する説明はありませんthen

関連情報