Назад | Перейти на главную страницу

Cron не отправляет электронную почту с выводом команды (работает из командной строки)

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" me@mydomain.com < /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/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

Вы также можете явно указать PATH в вашем crontab.

например. ПУТЬ = / usr / bin: / usr / sbin: / путь / к / исполняемому файлу :. * * / 1 * * * /root/monitorTemp.sh

Но я согласен с тем, что явная установка пути в сценариях, вероятно, является лучшим решением для разового использования.