X

設定 Crontab 指定收件人 或 不自動寄信

Crontab 只要執行有 輸出文字 的話, 預設就會將 輸出的文字 寄出來. (註: 空白也是文字)

不過, 今天 Debian Linux 升級完後, 突然連 程式回傳的狀態碼 也會寄信, 這就有點困擾, 信件內容如下:

Subject: Cron <user@web> flock -w 0 /tmp/xxx -c "/usr/bin/irc.py &" (failed)
command failed with exit status 1

主要是內容會印 command failed with exit status 1 的訊息, 但是這個訊息從哪來?

看來像是 flock (failed) 的結束狀態的回傳值, 但是 flock 就是要解決程式重覆執行的問題, 回傳 failed 是正常的.

正常的狀況, 每分鐘一封信的話, 是蠻困擾的, 所以先想辦法不讓 Crontab 寄信出來. 從 flock 著手似乎有困難, 直接從 crontab 比較簡單點.

設定 Crontab 不自動寄信

設定不自動寄信的方法有三種:

  1. 指定收件人為空: MAILTO="" # 缺點是, 若有帳號會統一收信, 那個帳號還是會爆.
  2. 將輸出結果導去 /dev/null: >/dev/null 2>&1
  3. 將輸出結果導去 /dev/null: &> /dev/null

範例

  • */30 * * * *  /usr/bin/get_news.py &> /dev/null
  • */1 * * * *   flock -w 0 /tmp/xxx -c "/usr/bin/irc.py &" &>/dev/null 2>&1
  • */1 * * * *   flock -w 0 /tmp/mon -c "tail -5 /var/log/apache.log | /usr/bin/monweb.py" &> /dev/null

設定 Crontab 指定收件人

Crontab 的設定方式有兩種
  1. crontab -e
  2. vim /etc/crontab

於這兩種方式挑其一, 做下述設定即可:

  • 若要指定收件人, 只要於最上面寫 MAILTO="xxx@example.com" 即可. (把整個檔案當成一個 bash file 即可)
  • 同理也可以設定 PATH=/usr/bin ... 等.
  • 指定多名收件人: MAILTO="xxx@localhost,xxx@example.com,ooo@example2.com" 即可

相關網頁

Tsung: 對新奇的事物都很有興趣, 喜歡簡單的東西, 過簡單的生活.
Related Post