O Cron não envia e-mail com saída de comando (funciona a partir do prompt do shell)

1

CentOS 5.5 x86_64

Tentando enviar por e-mail uma atualização periódica do sistema com a saída de um comando de temperaturas do sistema:

hpasmcli -s "show temp"

Exibe algo como:

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

Então, eu escrevo isto:

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

Defina para executar a cada hora no cron

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

Eu recebo o e-mail, mas está vazio. No entanto, se eu simplesmente executá-lo a partir da linha de comando ./monitorTemp.sh , ele me envia o e-mail com a saída do comando incluída!

O que estou perdendo?

    
por David Fox 16.11.2010 / 22:54

2 respostas

3

Tente mudar isso:

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

para:

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

Ao executar a partir do cron, você não tem o mesmo PATH de quando está logado normalmente, isso é algo que vale a pena ter em mente. Você também pode alterar o PATH antes

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

ou algo similar. Você pode obter o /path/to/hpasmcli fazendo which hpasmcli do seu prompt de comando normal.

EDIT: Como Dennis observa nos comentários, para scripts simples como este, não há necessidade de cd ou setup PATH , isso seria ótimo:

/path/to/hpasmcli -s "show temp" > /tmp/monitorTemp.log
    
por 16.11.2010 / 22:59
2

Você também pode definir um PATH explicitamente no seu crontab.

por exemplo. PATH = / usr / bin: / usr / sbin: / caminho / para / executável :. * * / 1 * * * /root/monitorTemp.sh

Mas eu concordo que configurar explicitamente o caminho nos scripts é provavelmente uma solução melhor para um offs.

    
por 16.11.2010 / 23:22