根据退出状态将 cron 电子邮件输出到 MAILTO

Dav*_*ave 13 bash cron

我有一个运行 php 命令的 cron 作业,如下所示:

php /path/to/script.php > dev/null

这应该只将 STDERR 输出发送到 MAILTO 地址。从我收集的内容来看,即使退出状态为 1,php 脚本也不会输出任何 STDERR 信息。

如何获取 php 命令 (STDOUT) 的输出并仅在退出状态非零时将其发送到 MAILTO?

Kyl*_*nes 15

php /path/to/script.php > logfile || cat logfile; rm logfile
Run Code Online (Sandbox Code Playgroud)

它将标准输出转储到logfile并且仅在脚本失败(退出非零)时才输出它。

注意:如果您的脚本也可能输出到,stderr那么您应该重定向stderrstdout. 否则,stderr即使退出代码为 0,打印到的任何内容也会导致 cron 发送电子邮件:

php /path/to/script.php > logfile 2>&1 || cat logfile; rm logfile
Run Code Online (Sandbox Code Playgroud)


小智 6

你有没有考虑过moreutils 的慢性病。我认为它完全符合您的要求:

chronic 运行一个命令,并安排它的标准输出和标准错误只有在命令失败(非零退出或崩溃)时才显示。如果命令成功,任何无关的输出都将被隐藏。

在最近的版本中,-e如果有任何内容已写入 stderr ,则还有一个开关可以显示完整输出。