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 不自動寄信
設定不自動寄信的方法有三種:
- 指定收件人為空: MAILTO="" # 缺點是, 若有帳號會統一收信, 那個帳號還是會爆.
- 將輸出結果導去 /dev/null: >/dev/null 2>&1
- 將輸出結果導去 /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 的設定方式有兩種
- crontab -e
- vim /etc/crontab
於這兩種方式挑其一, 做下述設定即可:
- 若要指定收件人, 只要於最上面寫 MAILTO="xxx@example.com" 即可. (把整個檔案當成一個 bash file 即可)
- 同理也可以設定 PATH=/usr/bin ... 等.
- 指定多名收件人: MAILTO="xxx@localhost,xxx@example.com,ooo@example2.com" 即可