Aqui está outra variação que utilizei com sucesso por muitos anos - capture a saída e a imprima apenas por erro , acionando um email. Isso não requer arquivos temporários e preserva toda a saída . A parte importante é a 2>&1
que redireciona STDERR para STDOUT.
Envie a saída inteira via configuração padrão do cron mailer:
1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || echo "$OUTPUT"
O mesmo, mas com um endereço e assunto específicos:
(o endereço também pode ser alterado definindo MAILTO = xxxx para todo o arquivo crontab)
1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || echo "$OUTPUT" | mail -s "Failed to backup" an@email.address
Você pode até executar várias ações com erro e adicionar ao email:
1 2 * * * root OUTPUT=`flexbackup -set all 2>&1` || {echo "$OUTPUT" ; ls -ltr /backup/dir ; }
Isso funcionará para comandos simples. Se você estiver lidando com pipes complexos ( find / -type f | grep -v bla | tar something-or-other
), é melhor mover o comando para um script e executar o script usando a abordagem mencionada acima. O motivo é que, se alguma parte do tubo for enviada para STDERR, você ainda receberá e-mails.