跟踪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结果,而是发送了空白电子邮件。
答案 0 :(得分:0)
在命令行测试和crontab之间设置的PATH不一样。
从命令行开始,which ifconfig
和which 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