在 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 系统上的手册:
除了
LOGNAME
、HOME
、 和之外SHELL
,cron(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
,但不会每分钟向您发送命令的输出。