根據 curl 命令的成功發送電子郵件
我創建了一個腳本來監視並進行如下查詢:-
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, --fail
curl 選項。從 curl 手冊頁:伺服器錯誤時靜默失敗(根本沒有輸出)。這樣做主要是為了更好地使腳本等更好地處理失敗的嘗試。在正常情況下,當 HTTP 伺服器無法傳遞文件時,它會返回一個 HTML 文件來說明這一點(通常還描述了原因等等)。該標誌將阻止 curl 輸出該標誌並返回錯誤 22。
此方法不是萬無一失的,有時會出現不成功的響應程式碼,尤其是在涉及身份驗證時(響應程式碼 401 和 407)。
注意:以上內容(大部分)是從我對您關於 curl 的類似問題的回答中復製而來的。
發送郵件
您可以使用該
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"
測試命令是否成功
測試命令的輸出時,您不需要使用
test
or[
。您可以像以下腳本(包含上述所有內容)一樣簡單地使用命令的輸出: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
.