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

13

Estou executando o CentOS 5.5.

Temos vários cronjobs armazenados em /etc/cron.daily/. Gostaríamos que o email de alguns desses cronjobs fosse para um endereço de email específico, enquanto o restante dos emails em /etc/cron.daily/ deveria ir para o endereço de email padrão (root @ localhost).

Cronjobs em /etc/cron.daily/ são executados no arquivo / etc / crontab. / 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?

Stefan Lasiewski
fonte
Nota para usuários do CentOS 6.5 (cronie): /etc/crontabnão especifica padrões.
Adam Monsen

Respostas:

13

Definir [email protected]em /etc/cron.daily/foonão funciona. A saída do script não é enviada para [email protected].

A página em http://www.unixgeeks.org/security/newbie/unix/cron-1.html também sugere uma solução simples:

O arquivo /etc/cron.daily/fooagora 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 igual ao caminho completo do script (por exemplo /etc/cron.daily/foo).

Aqui está o que o Unixgeeks.org diz sobre isso:

Saída do cron

Como eu disse antes, a saída do cron é enviada pelo correio ao proprietário do processo ou à pessoa especificada na variável MAILTO, mas e se você não quiser? Se você deseja enviar a saída para outra pessoa, basta canalizar a saída para o correio de comando. por exemplo

cmd | usuário mail -s "Assunto do email"

À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 cronograma a seguir enviará STDOUT para / dev / null e, em seguida, manipulará STDERR por meio do pipeline.

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

A 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 arquivo e e-mail

Stefan Lasiewski
fonte
6

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

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

Isso também oferece muito mais controle sobre quando o trabalho acontece; por exemplo, apenas em determinados dias da semana etc. Consulte o crontab(5)homem para obter mais informações.

barba de código
fonte
0

Supondo que você tenha acesso ao SA nesta máquina, você pode criar uma nova conta de usuário, adicionar as tarefas a essas tarefas tarefas cron. O e-mail desse usuário pode ser encaminhado usando um arquivo .forward nessa pasta inicial de contas. Pode ser necessário configurar permissões para esse usuário se as tarefas cron exigirem acesso privilegiado.

Se essa ou a resposta de Stefan melhor se adequa realmente depende de quanto aborrecimento você deseja configurá-la e se deseja que as mensagens de erro sejam enviadas para o email raiz ou para as pessoas que normalmente monitoram a produção diária.

Boa sorte

Michael Shaw
fonte