Linux

用於文件和電子郵件的 Cronjob stderr

  • October 11, 2013

我需要我的 cronjobs 仍然繼續在某些文件中輸出錯誤,但我也希望它們同時通過電子郵件發送。如果沒有一些技巧,這似乎是不可能的。

我發現了這個,但沒有幫助我。

最簡單的方法是什麼?

如果我正確理解您的問題,您希望將錯誤(而不是輸出)發送到日誌文件,並通過電子郵件發送。

為此,請結合使用tee和 stdout/stderr 重定向。

根據cron(8)手冊頁,cron 可以為您處理電子郵件。無需不必要地重複這項工作。

執行命令時,任何輸出都會郵寄給 crontab 的所有者(或者發送給 crontab 中 MAILTO 環境變數中指定的使用者,如果存在的話)。

這裡的技巧是將 STDERR 發送到日誌文件和電子郵件,而不是 STDOUT。以下範例說明瞭如何執行此操作。

假設我的腳本執行以下命令。ls tmp/foo是成功的,所以這個輸出到 STDOUT。ls tmp/bar產生一個錯誤,所以這個輸出被發送到 STDERR。

$ ls tmp/foo tmp/bar
ls: tmp/bar: No such file or directory
tmp/foo

以下 cronjob 將隱藏任何 STDOUT,但會將 STDERR 重定向到 /var/log/test.log

* * * * * ls tmp/foo tmp/bar 2>&1 >/dev/null | tee -a $HOME/var/log/test.log

這是結果。電子郵件和 ~/var/log/test.log 都會說同樣的話。

電子郵件正文說:

ls: tmp/bar: No such file or directory

日誌文件說同樣的話:

$ cat ~/var/log/test.log
ls: tmp/bar: No such file or directory

作為額外的獎勵,還可以將 STDERR 和 STDOUT 發送到日誌文件(您只是偶爾查看),但將 STDERR 發送到螢幕(如果手動執行)或電子郵件(如果從 cron 執行)。我將以下程式碼段用於長時間執行的建構腳本。

{ { ./configure && make && make install ; } >> $LOGFILE ; } 2>&1 | tee -a $LOGFILE

引用自:https://serverfault.com/questions/274651