阻止 cronjob 写入 /var/mail/$USER?

阻止 cronjob 写入 /var/mail/$USER?

在 macOS 中,配置的 cronjobscrontab将命令输出和/或错误消息(如果 cron 不成功)写入文件/var/mail/$USER。这可以预防吗?我试过了:

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

无论成功还是失败到达域,输出ping都会保存到邮件文件中...

答案1

cron 守护进程不会写入/var/mail/$USER,而是在作业输出任何内容或失败时向用户发送一封电子邮件,然后由系统的邮件传递服务将其写入该文件(用户的邮件收件箱)。

要关闭 cron 守护程序发送电子邮件,请MAILTO在 crontab 文件中将该变量设置为空值:

MAILTO=""

# rest of file with job schedules goes here

来自crontab(5)macOS 系统上的手册:

除了LOGNAMEHOME、 和之外SHELLcron(8)还将查看MAILTO是否有任何理由因在“此”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,但不会每分钟向您发送命令的输出。

相关内容