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它发送给我的电子邮件包括命令输出!

我错过了什么?

尝试改变这一点:

 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 

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

编辑:正如丹尼斯在评论中指出的,对于这样的简单脚本,没有必要cd或设置PATH ,这将是很好:

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

你也可以在你的crontab中明确地设置一个PATH。

例如。 PATH = / USR / bin中:/ usr / sbin目录:/path/到/可执行:. * * / 1 * * * /root/monitorTemp.sh

但我同意在脚本中明确地设置path可能是一个更好的解决scheme。