cron 仅在 STDERR 不为空时通过邮件发送 STDOUT 或日志文件

cron send STDOUT or logfile by mail only when STDERR is not blank

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

总而言之,如果 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 或其他实用程序。