【问题标题】:Send email with grep result using crontab?使用 crontab 发送带有 grep 结果的电子邮件?
【发布时间】:2014-09-28 00:01:12
【问题描述】:

跟踪 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 结果失败,而是发送空白邮件。

【问题讨论】:

    标签: email unix grep crontab


    【解决方案1】:

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

    从命令行执行which ifconfigwhich mail,甚至可能是which grep。然后在您的 crontab 中使用这些完全限定的路径。即

    修订 根据 Tripleee 的提醒,实际上不需要创建子外壳(sing ( cmds )。最有效的解决方案是删除子外壳字符,即

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

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

    如果出于某种原因您将此问题用作更复杂问题的占位符,该问题确实需要子 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 条目。

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

    IHTH

    【讨论】:

    • @SnoopyGuo :请参阅我的编辑以了解如何接受此答案。
    • 不需要子shell(即前两个命令周围的括号)。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-03-26
    • 2017-12-04
    • 2016-08-19
    • 2013-11-28
    • 2016-10-23
    相关资源
    最近更新 更多