使用crontab发送带有grep结果的电子邮件?

时间:2014-09-25 09:09:19

标签: email unix grep crontab

跟踪VPS流量使用情况。

我在终端尝试了命令:

(ifconfig|grep GiB) | mail -s "Traffic Usage" -t test@ahxxm.com -aFrom:ahxxm@ahxxm.com

成功发送了RX& TX信息。

但是当添加到crontab时:

0 5 * * * (ifconfig|grep GiB) | mail -s "Traffic Usage" -t test@ahxxm.com -aFrom:ahxxm@ahxxm.com

它无法发送grep结果,而是发送了空白电子邮件。

1 个答案:

答案 0 :(得分:0)

在命令行测试和crontab之间设置的PATH不一样。

从命令行开始,which ifconfigwhich mail,甚至which grep。然后在crontab中使用那些完全限定的路径。即。

<强>订正 来自tripleee的提醒,实际上没有必要创建一个子shell(唱( cmds )。)最有效的解决方案是删除子shell字符,即

0 5 * * * /path/to/ifconfig | /path/to/grep GiB | /path/to/mail -s "Traffic Usage" -t test@ahxxm.com -aFrom:ahxxm@ahxxm.com

虽然对于您的特定情况,额外的&#34;成本&#34;调用子shell是最小的,这实际上是你设置一个坏习惯,如果你继续所有脚本(如在while循环内),可能会影响你的处理性能。因此,最好只在真正需要时才使用子壳。

如果出于某种原因,您正在使用此问题作为更复杂问题的占位符,而这个问题确实需要子shell将输出发送到mail命令,那么我将保留原始解决方案。 (但我无法想到你需要在从crontab运行的流程链中使用子shell的原因。)

0 5 * * * (/path/to/ifconfig|/path/to/grep GiB) | /path/to/mail -s "Traffic Usage" -t test@ahxxm.com -aFrom:ahxxm@ahxxm.com

或者您可以在此处搜索以了解如何修改crontab环境,以便它的PATH将包含所需的路径,并且无需更改您的crontab条目。

但是,在一个操作系统和另一个操作系统之间添加PATH到crontab个条目可能会有很大差异,因此请务必针对您的操作系统进行搜索。我主要考虑老式的Unix,比如Sun,AIX和其他供应商系统,而不是Linux。

IHTH