/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?


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

Respostas:


13

Definir MAILTO=user@example.orgem /etc/cron.daily/foonão funciona. A saída do script não é enviada para user@example.org.

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" stefanl@example.org

Isso enviará um e-mail para 'stefanl@example.org' 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" stefanl@example.org

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


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,whomever@example.org
# 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.


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

Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.