![如何控制 crontab 的输出?](https://linux22.com/image/1105371/%E5%A6%82%E4%BD%95%E6%8E%A7%E5%88%B6%20crontab%20%E7%9A%84%E8%BE%93%E5%87%BA%EF%BC%9F.png)
我正在尝试通过自动化测试 (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 行的输出(因此为-A
for after 和-B
for before)。
只有运行 cron 的计算机安装了可运行的邮件服务器时,才会发送邮件。处理输出的脚本当然更加灵活,工作量也更大。
答案2
听起来好像您的命令的退出代码设置不正确,或者您正在向 stdout 发送消息但未捕获/重定向它。如果成功,您应该返回 0 ( exit 0
)。如果失败,则返回小于 256 的正数 ( exit 2
)。Cron 将检测退出代码并在非零退出代码时发送电子邮件(crontab 中的 MAILTO 变量)。
此外,如果任何输出被发送到 stdout 或 stderr,那么无论退出代码是什么,都会通过电子邮件发送给用户。
有关更多信息,请参阅cron
(8)手册页。