我有一个cron作业,它运行一个脚本,该脚本在sql数据库中编写错误检查并将错误写入日志文件。在命令中提供日志文件以运行脚本。当脚本发现错误时,我只想接收一封电子邮件,我希望日志包含在电子邮件中。如果脚本没有发现任何错误,我不想收到电子邮件。显然,当脚本发现或找不到错误时,脚本会写到日志中(我没有写这个脚本)。
20 6-10 * * 1-5 ~/job_failure_test.sh -o ~/job_fail.log 2>&1 /dev/null | mail -s "Errors" myemail@something.com < ~/job_fail.log
到目前为止,当有错误写入日志时,这一行会向我发送电子邮件,但它不会发送更新的日志。它将先前执行cron作业的日志发送给我。
发布于 2016-10-06 02:17:06
只需将财政(一个管道)改为财政(一个或) (假设脚本正确地使用退出代码),尽管将脚本更改为仅在错误时输出,这样做是更好的做法:
MAILFROM=myemail@something.com
MAILTO=myemail@something.com
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" myemail@something.com < ~/job_fail.log
发布于 2016-10-10 00:19:27
这个特性内置在cron中!如果命令产生任何输出,或者返回非零状态,则cron将向您发送电子邮件。
许多现代发行版不设置本地电子邮件。如果没有,安装一个邮件传输代理(MTA)。如果您绝对想要一些极简主义的东西,请参阅例如这条线 ( Ubuntu ),或者提供本地邮件的最小MTA (用于cron)? (如果您绝对想要的话)。或者只需安装一个通用的MTA,如Exim或Postfix,并将其配置为仅用于Debian的本地传递(参见这条线)。设置本地电子邮件后,您可以使用您最喜欢的邮件客户端读取本地电子邮件。
您可以创建一个包含外部电子邮件地址的文件~/.forward
,而不是在本地读取您的电子邮件,您的所有本地电子邮件都将在那里转发。如果您选择转发,您必须有一个能够向外部发送邮件的MTA (“智者”)。
或者,在crontab中设置MAIL
变量,使其直接将电子邮件发送到该地址。这也要求您的系统可以发送外部电子邮件。
https://unix.stackexchange.com/questions/314640
复制相似问题