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
但我同意在脚本中明确设置路径可能是一次性更好的解决方案。