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
或其他实用程序。
我看到很多关于仅通过电子邮件发送 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
或其他实用程序。