仅针对 cron.daily、cron.hourly 等作业中的 cron 错误发送电子邮件

仅针对 cron.daily、cron.hourly 等作业中的 cron 错误发送电子邮件

我有几个 cron 作业在运行(在/etc/cron.daily、、等中),并通过电子邮件发送结果。如果作业成功,我想停止发送这些电子邮件,并且只在出错时发送电子邮件(我知道可以通过重定向到来完成/etc/cron.hourly)。我知道如何对单个 cron 作业执行此操作,但这些特殊目录中的脚本是使用运行的。抑制这些脚本的成功电子邮件的最佳方法是什么?/etc/cron.weeklyroot@localhoststdout/dev/nullrun-parts

答案1

您可能想要使用程序的一个包装器,当出现问题时输出所有内容,否则吞掉标准输出。

一个例子可能是慢性的,只需在“run-parts”前面加上“cronic”即可,例如:

# m h dom mon dow user  command
 17 *  *   *   *  root  cd / && /etc/cronic run-parts --report /etc/cron.hourly

哪里/etc/cronic是可执行 cronic 脚本的地方,可从上述网站下载。

答案2

您应该发送成功的电子邮件通知/dev/null以便它们消失。

但你想看到不成功电子邮件通知。

这意味着你需要先直接stdout前往/dev/null,然后再直接/dev/stderr前往stdout

尝试将 cronjobs 的重定向部分更改为

>/dev/null 2>&1

此链接

答案3

  • 如果脚本运行良好,则只有在STDOUT成功时才会写入,STDERR如果出现错误则写入。
  • 默认情况下,cron 将把脚本写入的所有内容邮寄到 STDOUT 或者 STDERRArch 维基)。

因此,如果您想保留错误通知,请不要重定向STDERR,只需STDOUT

COMMAND > /dev/null

如果你做典型的>/dev/null 2>&1,你实际上是在抑制两者(bash 文档)。

  1. stdin文件描述符作为 /dev/null 的副本。
  2. stderr文件描述符复制一份stdout(已指向 /dev/null)。

相关内容