如何控制 crontab 的输出?

如何控制 crontab 的输出?

我正在尝试通过自动化测试 (sahi) 运行一个测试用例,因此我会在 1 小时后重复运行它(通过 crontab)。
我想要的是每当我的测试用例失败时,我都应该收到电子邮件,否则就不会。现在无论邮件通过与否,我都在接收邮件。
简而言之,我是否可以根据我在终端中得到的输出向某人发送邮件。

我正在使用 Ubuntu 10.10。

答案1

管道在 cron 中的工作方式与在 bash 中的一样好。您可以将输出通过管道传输到脚本,该脚本会检查输出并发送邮件。或者更简单的方法是使用 grep:

# in /etc/crontab

[email protected]
SHELL=/bin/bash

# m h dom mon dow user      command
30  * *   *   *   confus    /home/confus/bin/someCommand.sh | grep -A 11 -B 10 "Error:"

这将向[电子邮件保护]当 的输出中出现字符串“Error: ”时someCommand.sh。在这种情况下,电子邮件的文本将是“Error: ”出现前 10 行和出现后 11 行的输出(因此为-Afor after 和-Bfor before)。

只有运行 cron 的计算机安装了可运行的邮件服务器时,才会发送邮件。处理输出的脚本当然更加灵活,工作量也更大。

答案2

听起来好像您的命令的退出代码设置不正确,或者您正在向 stdout 发送消息但未捕获/重定向它。如果成功,您应该返回 0 ( exit 0)。如果失败,则返回小于 256 的正数 ( exit 2)。Cron 将检测退出代码并在非零退出代码时发送电子邮件(crontab 中的 MAILTO 变量)。

此外,如果任何输出被发送到 stdout 或 stderr,那么无论退出代码是什么,都会通过电子邮件发送给用户。

有关更多信息,请参阅cron(8)手册页。

相关内容