Debian
Crontab 作業未通過電子郵件發送失敗
我在 Debian 上有一個 cron 工作:
1 * * * * /home/paradroid/bin/myscript.sh >/dev/null
有一個安裝和配置的 MTA,當腳本出現語法錯誤時我會收到電子郵件,所以我一直認為當出現任何問題時我會收到通知。
curl
該腳本通過代理下載文件。最近代理出現故障,curl
無法下載。這是腳本中的最後一個命令,它一直以錯誤程式碼 7 退出。我以為發生這種情況時我會收到電子郵件,但我沒有。
為什麼我會從腳本中的語法錯誤之類的東西中收到電子郵件警報,但是當腳本無法完成其工作並以錯誤程式碼退出時我沒有收到它們?
有什麼問題,還是我必須讓腳本在出現錯誤時直接給我發電子郵件
curl
?
在與 Freenode 上的一些人交談後
#curl
,一位開發人員提到curl
大約十年(7.23.0 之前)存在一個錯誤,其中選項解析錯誤將-Ss
(--show-silent --show-error
) 視為-s
(--silent
),因此所有輸出都被抑制,包括stdout
.解決方案(在 7.23.0 之前)是使用
-sS
替代或長選項。那個討厭的錯誤讓我很困惑,讓一個相當重要的 cron 工作在我不知道的情況下失敗了好幾天!
我假設您的 cron 電子郵件設置都是正確的,否則您會收到電子郵件。
您將所有 stdout 發送到
/dev/null
,因此任何列印錯誤消息的內容都必須將它們輸出到 stderr。您可能希望確保腳本中的所有內容都正確輸出。有時我不得不使用第三方程式碼,這些程式碼將所有內容都發送到標準輸出。在這些情況下,我通常會破解錯誤檢查。它並不漂亮,但大多數 shell 腳本也不是。