Eu descobri que wget e yum enviavam stdout para stderr, então eu tive que canalizar tudo para os arquivos de log.
Eu tenho um crontab (root) que executa um script e a saída está definida como > / dev / null, mas sempre recebo os emails sempre que são executados. Eu só quero receber e-mails de erro.
# Rackspace driveclient update (12pm MST)
0 12 * * * /root/scripts/driveclient-update > /dev/null
A única maneira de desativá-lo é usar > / dev / null 2 > & 1 mas depois não receberei emails de erro. Isso está acontecendo em três servidores CentOS diferentes, dois são 6,3 e um é 6,4.
NOTA : li repetidamente que > / dev / null deve enviar o stdout para lá e evitar o e-mail se não houver nada além do stdout do script, então funciona para pelo menos algumas pessoas; Não consigo descobrir por que não está funcionando nesses servidores.
Aqui está um exemplo de onde > / dev / null deve funcionar:
Defina MAILTO="[email protected]" no arquivo crontab. E deixe seu script ' echo ' stderr ou stderr quando as exceções são lançadas por um $ (subshell) . Tudo pode acontecer, então trabalhe com valores de retorno (0 é OK, qualquer outra coisa é uma exceção) como neste exemplo:
#!/bin/bash
return=$(/usr/bin/curl --silent --show-error --fail "http://server/somestate" 2>&1)
exitcode=$?
if [ $exitcode != 0 ]
then
echo "ERROR $HOSTNAME $0 $exitcode $return"
logger "ERROR $HOSTNAME $0 $exitcode $return"
exit $exitcode
else
logger "INFO $HOSTNAME $0 $exitcode $return"
exit 0
fi
>
apenas redireciona std out / err, o e-mail é uma função interna do script mais parecido.
verifique o script -h
para parâmetros opcionais ou documentos do utilitário rackspace
Para referência posterior. Você não precisa enviar tudo para um arquivo de log. É possível dizer ao bash para também enviar saída no STDERR para / dev / null.
# Rackspace driveclient update (12pm MST)
0 12 * * * /root/scripts/driveclient-update > /dev/null 2>&1
Observe que tudo o que fiz foi acrescentar 2>&1
ao final do arquivo.