Email

cron 不遵循 bash 腳本的指令有條件地發送郵件

  • January 31, 2013

我無法讓 cron 根據 bash 腳本中設置的預定義條件通過電子郵件發送附件。以下是我的 /etc/crontab 設置:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=account@email.com
MAILFROM=cron@server.com
0,30 * * * * root /some/bash/script

bash 腳本包含:

#!/bin/bash
PATH=/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/bin
if [ -s /var/log/test ]; then
echo "test" | mailx -s "test" -a /var/log/test -r cron@server.com account@email.com
fi
exit 0

問題是即使測試文件為空,cron 有時也會發送電子郵件。有時,主題標頭“測試”會被 cron 用它自己的主題標頭覆蓋。如果沒有設置“MAILFROM”,儘管 mailx 中的設置,cron 將使用 root。

我對 cron 很陌生,所以我不太確定我是否做對了。如果有人能指出導致問題的原因,將不勝感激。

您需要了解這cron不僅會丟棄作業生成的輸出。如果 cron 作業生成的輸出未處理(例如,通過郵寄給某人,或將其放入文件中,或以其他方式),則此輸出將按照 MAILTO 變數中的描述通過電子郵件發送。如果您不希望這種情況發生,您需要確保沒有任何輸出會超出您的工作結束;這就是為什麼看到 crontab 條目很常見的原因,例如,

*/5 * * * *     munin /usr/bin/munin-cron >& /dev/null

該終端>& /dev/null將告訴 cron 丟棄任何未由正在執行的執行檔/腳本處理的輸出。

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