Crontab - 将 StdErr 发送到电子邮件并将 stdOut 发送到日志文件

Crontab - 将 StdErr 发送到电子邮件并将 stdOut 发送到日志文件

在我的 crontab 中,我尝试使用自定义主题标题将 stdout 发送到日志文件,并将 stderr 发送到电子邮件帐户。

我尝试了很多解决方案但都没有达到我最初的目标,让我解释一下:

第一种方法:使用 MAILTO

[email protected]
*/1 * * * * /my/script.sh > /my/file_stdout.log

这会将标准输出发送到日志文件并将错误发送到电子邮件,但缺点是我不知道如何更新电子邮件主题,因此我得到的结果是主题:Cron /my/script.sh > /my/file_stdout.log

第二种方法:使用邮件

我尝试过多种使用邮件的方法,但没有一种能像我想要的那样工作:

*/1 * * * * /my/script.sh > /my/file_stdout.log 2>&1; [ $? != 0 ] && mail -s "Subject here" [email protected] < /my/file_stdout.log

另一个 :

*/1 * * * * /my/script.sh > /my/file_stdout.log 2>&1 || mail -s "Subject here" [email protected] < /my/file_stdout.log

另一个 :

*/1 * * * * /my/script.sh 2>&1 | tee /my/file_stdout.log | mail -s "Subject here" [email protected] < /my/file_stdout.log

另一个:

*/1 * * * * OUTPUT=`/my/script.sh 2>&1` || echo "$OUTPUT" | mail -s "Subject here" [email protected]

我还注意到或运算符||在我的 crontab 中不起作用,我甚至将 crontab 的 shell 更改为 /bin/bash(通过添加 SHELL=/bin/bash 变量)。

我在 Redhat 企业服务器上,没有管理员权限,所以我无法安装像 Chronic 这样的工具!

答案1

我终于让它工作了,并发现了||运算符的问题,脚本总是返回代码 0,所以现在我return在脚本末尾明确添加了一个语句,现在可以按预期工作了:

*/1 * * * * (/my/script.sh > /my/file_stdout.log 2>&1) || mail -s "Subject here" [email protected] < /my/file_stdout.log

相关内容