Email
cron 不遵循 bash 腳本的指令有條件地發送郵件
我無法讓 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 丟棄任何未由正在執行的執行檔/腳本處理的輸出。