1

我的 crontab 包含以下条目

*/2 * * * * /usr/local/bin/some_command &> /dev/null

换句话说,每两分钟运行一次 some_command 并丢弃输出,这样 cron 就不会向我发送输出的电子邮件。

但是,每天大约一到两次,我会收到一封包含 /usr/local/bin/some_command 输出的电子邮件——好像 &> /dev/null 已从 crontab 条目中删除。

from: Cron Daemon <root@hostanme.edu>
to: jsp@hostname.edu
subject:  Cron <jsp@psy58> /usr/local/bin/some_command &> /dev/null
...
[some_command output]

什么可能导致这种情况?

同样,该命令每天被 crond 调用数百次,但只有一两个实例会通过电子邮件将输出发送给我。

实际调用的命令是:

/usr/local/bin/proctempalert -i='sensors -f | mail -s "`hostname` is HOT" myemail@gmail.com' &> /dev/null

而且我知道它运行正常,(也就是说,当我的 cpu 运行很热时,我会收到一封电子邮件)。

4

1 回答 1

2

当阻止 crond 将命令的输出通过电子邮件发送给您时,您进行此设置的方式(在命令末尾使用“&> /dev/null”)将命令的标准输出发送到 /dev/null。但是,它不会影响从命令到 stderr 的输出。我怀疑每隔一段时间,您的命令就会向 stderr 发送某种消息,这就是您收到的虚假电子邮件中的内容。要将 stdout 输出和 stderr 输出都发送到 /dev/null,请将以下内容放在命令末尾:

/dev/null 2>&1

所以,整个事情看起来像这样:/usr/local/bin/proctempalert -i='sensors -f | mail -s "hostname很热" myemail@gmail.com' > /dev/null 2>&1

于 2013-07-15T17:20:37.693 回答