/etc/cron.daily/foo: Enviar email para um usuário em particular em vez de root?

12

Estou executando o CentOS 5.5.

Temos vários cronjobs armazenados em /etc/cron.daily/. Gostaríamos que o e-mail de alguns desses cronjobs acessasse um determinado endereço de e-mail, enquanto o restante dos e-mails em /etc/cron.daily/ deveria ir para o endereço de e-mail padrão (root @ localhost).

Cronjobs em /etc/cron.daily/ são executados a partir do arquivo / etc / crontab. O / etc / crontab especifica um campo 'MAILTO'. Posso substituir isso definindo MAILTO no meu /etc/cron.daily/foo cronjob?

Qual é a melhor maneira de lidar com isso?

    
por Stefan Lasiewski 02.11.2010 / 22:22

3 respostas

12

A definição de [email protected] in /etc/cron.daily/foo não funciona. A saída do script não é enviada para [email protected].

A página no link também sugere uma solução simples:

O arquivo /etc/cron.daily/foo agora contém o seguinte:

#!/bin/sh
/usr/bin/script 2>&1 | mailx -s "$0" [email protected]

Isso enviará um e-mail para '[email protected]' com o assunto que é igual ao caminho completo do script (por exemplo, /etc/cron.daily/foo ).

Veja o que o Unixgeeks.org diz sobre isso:

Output from cron

As I've said before, the output from cron gets mailed to the owner of the process, or the person specified in the MAILTO variable, but what if you don't want that? If you want to mail the output to someone else, you can just pipe the output to the command mail. e.g.

cmd | mail -s "Subject of mail" user

Às vezes, eu só quero receber os erros de um cronjob, não do stdout, então eu uso esse truque. A sintaxe pode parecer errada à primeira vista, mas tenha certeza de que funciona. O cronjob a seguir enviará STDOUT para / dev / null e manipulará STDERR por meio do pipeline.

doit 2>&1 >/dev/null | mailx -s "$0" [email protected]

Mesma coisa, mas envie para o syslog:

doit 2>&1 >/dev/null | /usr/bin/logger -t $ME

Veja também minha resposta no ServerFault para Cronjob stderr para arquivar e enviar e-mail

    
por 02.11.2010 / 23:38
6

Uma solução mais elegante seria usar /etc/cron.d diretamente. Em vez de ter seu script em /etc/cron.daily , coloque-o em algum lugar como /usr/local/sbin/myscript.sh e, em seguida, crie o arquivo /etc/cron.d/myscript as:

MAILTO=root,[email protected]
# run myscript.sh at 4:11 every day
11 4 * * * root /usr/local/sbin/myscript.sh

Isso também lhe dá muito mais controle sobre quando o trabalho acontece; por exemplo, apenas em determinados dias da semana, etc. Veja o crontab(5) man para mais informações.

    
por 13.08.2012 / 07:26
0

Supondo que você tenha acesso SA nessa máquina, você pode criar uma nova conta de usuário e adicionar as tarefas às tarefas Cron dessa conta. O email desse usuário pode ser encaminhado usando um arquivo .forward na pasta inicial dessa conta. Você pode ter que configurar permissões para este usuário se as tarefas do cron exigirem acesso privilegiado.

Se isso ou a resposta de Stefan é mais adequada, depende do trabalho que você deseja em configurá-la e se deseja que as mensagens de erro sejam enviadas para o email raiz ou para as pessoas que normalmente monitoram a saída diária.

Boa sorte

    
por 04.11.2010 / 01:00

Tags