cron não segue as instruções do script bash para enviar correio condicionalmente

1

Estou tendo problemas para fazer com que o cron envie um anexo por e-mail com base em uma condição predefinida definida no script bash. A seguir está minha configuração do / etc / crontab:

SHELL=/bin/bash
PATH=/sbin:/bin:/usr/sbin:/usr/bin
[email protected]
[email protected]
0,30 * * * * root /some/bash/script

O script bash contém:

#!/bin/bash
PATH=/bin:/sbin:/usr/sbin:/usr/bin:/usr/local/bin
if [ -s /var/log/test ]; then
 echo "test" | mailx -s "test" -a /var/log/test -r [email protected] [email protected]
fi
exit 0

O problema é que o cron às vezes envia um email apesar do arquivo de teste estar vazio. Às vezes, o cabeçalho de assunto "test" é substituído pelo cron com seu próprio cabeçalho de assunto. Sem definir "MAILFROM", o cron usará o root apesar da configuração no mailx.

Sou muito novo no cron, por isso não tenho muita certeza se fiz as coisas corretamente. Agradeceria se alguém pudesse apontar o que está causando o problema.

    
por Question Overflow 31.01.2013 / 04:55

1 resposta

1

Você precisa entender que cron não descartará apenas a saída gerada por um trabalho. Se um cron job gera uma saída que não é tratada (por exemplo, enviando-a a alguém ou colocando-a em um arquivo, ou de alguma outra forma), esta saída será enviada como descrito na variável MAILTO. Se você não quer que isso aconteça, você precisa ter certeza de que nenhuma saída pode sair do final do seu trabalho; é por isso que é muito comum ver entradas de crontab que digam, por exemplo,

*/5 * * * *     munin /usr/bin/munin-cron >& /dev/null

Esse terminal >& /dev/null é para informar ao cron para descartar qualquer saída que não seja manipulada pelo executável / script sendo executado.

    
por 31.01.2013 / 10:12

Tags