Cron 不会发送带有命令输出的电子邮件(在 shell 提示符下运行)

Cron 不会发送带有命令输出的电子邮件(在 shell 提示符下运行)

CentOS 5.5 x86_64

尝试通过电子邮件发送定期系统更新,其中包含系统温度命令的输出:

hpasmcli -s "show temp"

输出类似以下内容:

Sensor   Location              Temp       Threshold
------   --------              ----       ---------
#1        AMBIENT              21C/69F    42C/107F
...

因此,我编写了以下脚本:

#!/bin/bash
hpasmcli -s "show temp" > /tmp/monitorTemp.log &
wait
mail -s "temperature" [email protected] < /tmp/monitorTemp.log
rm -f /tmp/monitorTemp.log

在 cron 中设置为每小时运行一次

* */1 * * * /root/monitorTemp.sh

我收到了电子邮件,但里面是空的。但是,如果我只是从命令行运行它,./monitorTemp.sh它会向我发送包含命令输出的电子邮件!

我错过了什么?

答案1

尝试改变这个:

hpasmcli -s "show temp" > /tmp/monitorTemp.log &
wait

到:

cd /path/to/hpasmcli
./hpasmcli -s "show temp" > /tmp/monitorTemp.log

从 cron 运行时,您没有与正常登录时相同的 PATH,这是值得注意的。您也可以在之前更改 PATH

PATH=$PATH:/path/to/hpasmcli
hpasmcli -s "show temp" > /tmp/monitorTemp.log

或类似的东西。您可以通过在常规命令提示符下/path/to/hpasmcli执行来获取。which hpasmcli

编辑:正如丹尼斯在评论中指出的那样,对于像这样的简单脚本,不需要cd或设置PATH,这样就足够了:

/path/to/hpasmcli -s "show temp" > /tmp/monitorTemp.log

答案2

您还可以在 crontab 中明确设置 PATH。

例如 PATH=/usr/bin:/usr/sbin:/path/to/executable:. * */1 * * * /root/monitorTemp.sh

但我同意在脚本中明确设置路径可能是一次性更好的解决方案。

相关内容