解决方法
如果我正确理解您的问题,您希望将错误(不输出)发送到日志文件,并通过电子邮件发送.
为此,请使用tee和stdout / stderr重定向的组合.
根据cron(8)手册页,cron可以为您处理电子邮件.无需不必重复这项工作.
When executing commands,any output is mailed to the owner of the crontab (or to the user named in the MAILTO environment variable in the crontab,if such exists).
这里的技巧是将STDERR发送到日志文件和电子邮件,但不是STDOUT.以下示例说明了如何执行此操作.
假设我的脚本执行以下命令. ls tmp / foo成功,因此输出转到STDOUT. ls tmp / bar会生成错误,因此将此输出发送到STDERR.
$ls tmp/foo tmp/bar ls: tmp/bar: No such file or directory tmp/foo
以下cronjob将隐藏任何STDOUT,但会将STDERR重定向到/var/log/test.log
* * * * * ls tmp/foo tmp/bar 2>&1 >/dev/null | tee -a $HOME/var/log/test.log
结果如下.电子邮件和〜/ var / log / test.log都会说同样的话.
电子邮件正文说:
ls: tmp/bar: No such file or directory
日志文件说同样的事情:
$cat ~/var/log/test.log ls: tmp/bar: No such file or directory
作为额外的奖励,还可以发送STDERR& STDOUT到日志文件(您只偶尔查看),但是将STDERR发送到屏幕(如果手动运行)或电子邮件(如果从cron运行).我将以下snippit用于长时间运行的构建文件.
{ { ./configure && make && make install ; } >> $LOGFILE ; } 2>&1 | tee -a $LOGFILE