当脚本抛出错误时,如何让 cron 发送带有错误日志的电子邮件?

当脚本抛出错误时,如何让 cron 发送带有错误日志的电子邮件?

我有一个 cron 作业,它运行一个脚本,该脚本检查 SQL 数据库中的错误并将错误写入日志文件。日志文件在运行脚本的命令中提供。我只想在脚本发现错误时收到电子邮件,并且希望将日志包含在电子邮件中。如果脚本没有发现任何错误,我不想收到电子邮件。显然,当脚本发现或未发现错误时,脚本会写入日志(我没有编写此脚本)。

    20 6-10 * * 1-5 ~/job_failure_test.sh -o ~/job_fail.log 2>&1 /dev/null | mail -s "Errors" [email protected] < ~/job_fail.log

到目前为止,当日志中写入错误时,此行会向我发送电子邮件,但不会向我发送更新的日志。它向我发送上次执行 cron 作业的日志。

答案1

就改变| (A管道) 到 || (一个或者)(假设脚本正确使用退出代码)尽管将脚本更改为仅在错误时输出,但这样做是更好的做法:

[email protected]
[email protected]
20 6-10 * * 1-5 ~/job_failure_test.sh

丑陋的方式;

20 6-10 * * 1-5 ~/job_failure_test.sh > ~/job_fail.log 2>&1 || mail -s "Errors" [email protected] < ~/job_fail.log

答案2

此功能内置于 cron 中!如果该命令产生任何输出,或者返回非零状态,则 cron 会向您发送一封电子邮件。

许多现代发行版不设置本地电子邮件。如果没有,请安装邮件传输代理 (MTA)。参见例如这个线程对于 Ubuntu,或者在本地传送邮件的最小 MTA(用于 cron)?如果你绝对想要简约的东西。或者只安装一个常见的 MTA,例如 Exim 或 Postfix,并将其配置为仅本地传送(参见例如这个线程)对于 Debian。设置本地电子邮件后,您可以使用您喜欢的邮件客户端阅读本地电子邮件。

您可以创建一个文件,而不是在本地阅读电子邮件~/.forward包含外部电子邮件地址,您的所有本地电子邮件都将转发到那里。如果您选择转发,您必须拥有能够向外部发送邮件的 MTA(“智能主机”)。

或者,MAIL在 crontab 中设置变量,使其将电子邮件直接发送到该地址。这也要求您的系统可以向外部发送电子邮件。

相关内容