只有当STDERR不为空时,cron才会通过邮件发送STDOUT或logfile

时间:2015-03-25 18:05:56

标签: bash cron cygwin

我已经看到很多关于仅通过电子邮件发送STDERR的问题,但这并不是我想要的。当STDERR不为空时,我希望将STDOUT和STDERR发送给我,或者,也可以发送日志文件的内容,这将完成同样的事情。我怎么能做到这一点?

1 个答案:

答案 0 :(得分:1)

总之,如果STDERR输出不为空,您希望通过电子邮件发送日志文件。在那种情况下:

some_command 2>"$HOME/.errs.tmp.$$"
[ -s "$HOME/.errs.tmp.$$" ] && mail user@host -s "Error Info" <logfile

-s测试文件是否为非空。因此,只有在出现错误时才会发送电子邮件。

要清理临时文件,请使用:

errs="$HOME/.errs.tmp.$$"
my_exit() { rm -f "$errs"; }
trap my_exit  EXIT
some_command  2>"$errs"
[ -s "$errs" ] && mail user@host -s "Error Info" <logfile

请注意,临时文件已放在用户的主目录中。虽然这里可能不重要,但这可以避免与/tmp中创建的临时文件相关的安全问题,因此需要mktemp或其他实用程序。