Osx

防止 cronjob 寫入 /var/mail/$USER?

  • June 11, 2019

在 macOS 中,配置的 cronjobscrontab將命令輸出和/或錯誤消息(如果 cron 不成功)寫入/var/mail/$USER文件。這可以防止嗎?我試過了:

* * * * *      /sbin/ping -c1 website.com ... 2>&1 >/dev/null

無論是成功還是未能到達域,ping輸出都保存到郵件文件…

cron 守護程序不會寫入/var/mail/$USER,它會在作業輸出任何內容或失敗時向使用者發送一封電子郵件,然後系統的郵件遞送服務會將其寫入該文件(使用者的郵件收件箱)。

要關閉從 cron 守護程序發送電子郵件,請MAILTO在 crontab 文件中將該變數設置為空值:

MAILTO=""

# rest of file with job schedules goes here

crontab(5)macOS 系統上的手冊中:

除了LOGNAME,HOMESHELL,cron(8)將查看MAILTO是否有任何理由由於在“this”crontab 中執行命令而發送郵件。如果 MAILTO已定義(且非空),則將郵件發送給如此命名的使用者。如果MAILTO 已定義但為空 ( MAILTO=""),則不會發送郵件。

$$ … $$

如果您以這種方式關閉作業輸出和錯誤通知的郵件,您可能希望以其他方式記錄作業,例如,

* * * * *      /sbin/ping -c1 website.com ... >>/tmp/ping.log 2>&1
0 0,12 * * *   mv /tmp/ping.log /tmp/ping.log.old

這會將 的輸出添加ping到特定文件,並在午夜和中午將該文件移走(請注意,您的重定向/dev/null是從後到前的)。

ping如果失敗,您可能還想明確發送電子郵件:

* * * * *      /sbin/ping -c1 website.com ... >>/tmp/ping.log 2>&1 || mail -s "ping failed, do something" "$LOGUSER"

ping每當返回非零退出狀態時,這將發送一封具有指定標題的空電子郵件。

或者,您可以從一開始就直接獲得重定向,而無需打擾MAILTO日誌文件或發送電子郵件:

* * * * *      /sbin/ping -c1 website.com ... >/dev/null 2>&1

這將在ping失敗時向您發送一封電子郵件,但不會每分鐘向您發送命令的輸出。

引用自:https://unix.stackexchange.com/questions/524111