【问题标题】:How to save cronjob error to file and email it?如何将 cronjob 错误保存到文件并通过电子邮件发送?
【发布时间】:2013-10-19 14:31:42
【问题描述】:

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

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

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

【问题讨论】:

  • crontab 需要执行脚本的完整路径。试试* * * * * /bin/sh /path/to/script.sh ...
  • 您的脚本是否真的向 stderr 发送任何内容?
  • @fedorqui 不是路径的问题,文件已经创建好了
  • @MikeW 是的,我在电子邮件中收到错误消息

标签: linux crontab


【解决方案1】:

我的解决办法是:

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

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

【讨论】:

    【解决方案2】:

    试试这个,效果很好

    * * * * * script.sh >/dev/null 2>> /path/to/file.log  || echo "error check log file"
    

    【讨论】:

    • 谢谢。这很好,但我找到了解决方案。会贴得更低。
    • 好吧,我是这里的新手,所以我不能这么快发布答案,所以我将它添加到我的问题中。
    猜你喜欢
    • 2013-10-18
    • 2010-12-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-07-21
    • 2012-07-20
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多