Por que a saída dos trabalhos do cron continua sendo escrita em ~ / dead.letter?

2

Eu tenho um trabalho agendado por cron executando todos os dias, e o trabalho é sobre a compactação de uma pasta usando tar ; e descobri que a saída padrão de tar continua sendo escrita em ~/dead.letter todos os dias. O conteúdo que é gravado é apenas a lista dos arquivos que foram compactados, assim como o que você verá na linha de comando ao executar tar manualmente.

A pesquisa de dead.letter mostra que é algo relacionado a uma carta parcial que foi interrompida antes de ser enviada com sucesso. Eu tenho um script de shell em execução como daemon que monitora algo na máquina e envia e-mail em condições específicas. O daemon é iniciado usando o seguinte comando:

setsid ~/send_mail_on_certain_event.sh >~/sendmail.log 2>&1 < /dev/null &

Este é o único lugar que eu uso mail (na verdade usando ssmtp ) na máquina, e está funcionando como eu esperava (recebi o e-mail que queria). Não sei se tem alguma coisa a ver com a saída da tarefa cron sendo gravada em dead.letter .

    
por goodbyeera 21.04.2015 / 19:12

1 resposta

1

Quando um trabalho cron falha, ou tem saída, o cron tentará enviá-lo para o usuário do mailjob. Quando o email está configurado para ele.
Você tem um comando tar escrevendo informações no stdout e ninguém está redirecionando o stdout. Você deve redirecionar todos os stdout e stderr de todos os seus trabalhos do crontab para / dev / null (ou algum arquivo de log quando estiver interessado na saída). Exemplo

10 0 * * * tar tvf /tmp/tar.tst /home/era >/dev/null 2>&1

Um pouco bobo: pedir ao tar para ser detalhado com o sinalizador -v e jogar fora tudo que o tar escreve. Mas isso é para quando você quiser testar algo como

10 10 * * * tar tvf /tmp/tar.tst /home/era

Ou você pode testar

* * * * * echo "Hello and Goodbye Era"

e procure por e-mail na sua conta de usuário

    
por 21.04.2015 / 22:07