3

我的目标是保存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

说明:在不获取 stdout 的情况下将 stderr 重定向到管道,然后使用 tee -a 将 stderr 附加到日志文件并将其打印到终端,该终端会自动重定向到电子邮件(请参阅 MAILTO)。

所以我有一个包含错误消息的日志文件和电子邮件。

4

2 回答 2

4

我的解决方案是:

#crontab    
MAILTO=my@email.com
* * * * * /path/to/script.sh 2>&1 >/dev/null | tee -a /path/to/file.log

解释见上面我的第一篇文章。

于 2013-10-19T06:31:42.520 回答
1

试试这个,它有效

* * * * * script.sh >/dev/null 2>> /path/to/file.log  || echo "error check log file"
于 2013-10-18T17:46:06.177 回答