Bash

根據 curl 命令的成功發送電子郵件

  • May 29, 2015

我創建了一個腳本來監視並進行如下查詢:-

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)。

失敗的 HTTP 請求的 curl 退出程式碼

通常,如果請求的 HTTP 資源不可用,Web 伺服器會使用與相關 HTTP 狀態程式碼相對應的 HTML 文件進行響應,例如 404。在這種情況下,curl 會從伺服器接受此文件,因為它成功獲得了響應從 Web 伺服器,它顯示錯誤文件並以狀態 0 退出表示成功。

如果檢索 HTTP 資源時出現問題,您希望curl返回錯誤程式碼。為此,您需要提供-f, --failcurl 選項。從 curl 手冊頁:

伺服器錯誤時靜默失敗(根本沒有輸出)。這樣做主要是為了更好地使腳本等更好地處理失敗的嘗試。在正常情況下,當 HTTP 伺服器無法傳遞文件時,它會返回一個 HTML 文件來說明這一點(通常還描述了原因等等)。該標誌將阻止 curl 輸出該標誌並返回錯誤 22。

此方法不是萬無一失的,有時會出現不成功的響應程式碼,尤其是在涉及身份驗證時(響應程式碼 401 和 407)。

注意:以上內容(大部分)是從我對您關於 curl 的類似問題的回答中復製而來的。

發送郵件

您可以使用該mail程序發送電子郵件。在基於 Debian 的系統上,它可以通過mailutils軟體包安裝,而在基於 Red Hat 的發行版上,它由mailx軟體包提供。

echo "Body of email" | mail user@example.com -s "Subject line"

如果您已經使用命令行郵件客戶端,例如mutt您可以使用:

echo "Body of email" | mutt user@example.com -s "Subject line"

測試命令是否成功

測試命令的輸出時,您不需要使用testor [。您可以像以下腳本(包含上述所有內容)一樣簡單地使用命令的輸出:

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

請注意,我$httpUrl使用雙引號引用了 shell 變數,以便腳本可以與其他 URL 一起使用,這些 URL 可能包含由 shell 解釋的字元(這&是一個常見的字元)。

最後,if您問題中的陳述缺少相應的then.

引用自:https://unix.stackexchange.com/questions/204453