use*_*226 3 osx cron io-redirection email ping
在 macOS 中,配置的 cronjobscrontab将命令输出和/或错误消息(如果 cron 不成功)写入/var/mail/$USER文件。这可以防止吗?我试过了:
* * * * * /sbin/ping -c1 website.com ... 2>&1 >/dev/null
Run Code Online (Sandbox Code Playgroud)
无论是成功到达域还是失败到达域,都将ping输出保存到邮件文件中...
cron 守护程序不会写入/var/mail/$USER,它会在作业输出任何内容或失败时向用户发送电子邮件,然后系统的邮件传递服务将其写入该文件(用户的邮件收件箱)。
要关闭从 cron 守护程序发送电子邮件MAILTO,请在 crontab 文件中将该变量设置为空值:
MAILTO=""
# rest of file with job schedules goes here
Run Code Online (Sandbox Code Playgroud)
来自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
Run Code Online (Sandbox Code Playgroud)
这会将 的输出添加ping到特定文件,并在午夜和中午将该文件移走(请注意,您的重定向/dev/null是从后到前的)。
如果ping失败,您可能还想明确发送电子邮件:
* * * * * /sbin/ping -c1 website.com ... >>/tmp/ping.log 2>&1 || mail -s "ping failed, do something" "$LOGUSER"
Run Code Online (Sandbox Code Playgroud)
每当ping返回非零退出状态时,这将发送带有指定标题的空电子邮件。
或者,您可以从一开始就获得重定向,而不必费心查看MAILTO日志文件或发送电子邮件:
* * * * * /sbin/ping -c1 website.com ... >/dev/null 2>&1
Run Code Online (Sandbox Code Playgroud)
这将在ping失败时向您发送一封电子邮件,但不会每分钟向您发送命令的输出。