Debian

Crontab 作業未通過電子郵件發送失敗

  • June 17, 2014

我在 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 腳本也不是。

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