我的目标是保存 cronjob错误并发送电子邮件给我。我不关心标准输出,这就是我将其重定向到/ dev / null的原因。
通过crontab中的此设置发送邮件:
MAILTO=my@email.com
我尝试使用以下命令运行它:
* * * * * /path/to/script.sh > /dev/null 2 >> /path/to/file.log
它可以通过电子邮件发送错误。日志文件已创建,但为空。
我做错了什么?
=============================================== ===================================
我找到了解决方案。谢谢大家的帮助!(我不能将其作为答案发布,所以我在这里修改解决方案。)
我使用了此引用How can I redirect stderr to a pipe?
# version 2: redirect stderr to the pipe without getting stdout (it's
# redirected to /dev/null)
myprog 2>&1 >/dev/null | grep ...
我的解决方案是:
#crontab
MAILTO=my@email.com
* * * * * /path/to/script.sh 2>&1 >/dev/null | tee -a /path/to/file.log
说明:将stderr重定向到管道而不获取stdout,然后使用tee -a将stderr附加到日志文件并将其打印到终端,终端会自动重定向到电子邮件(请参阅MAILTO)。
所以我有一个包含错误消息的日志文件和电子邮件。
答案 0 :(得分:3)
我的解决方案是:
#crontab
MAILTO=my@email.com
* * * * * /path/to/script.sh 2>&1 >/dev/null | tee -a /path/to/file.log
解释见上文第一篇文章。
答案 1 :(得分:0)
试试这个,它有效
* * * * * script.sh >/dev/null 2>> /path/to/file.log || echo "error check log file"