ti-enxame.com

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

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 fosse para um endereço de e-mail específico, enquanto o restante dos e-mails em /etc/cron.daily/ deveriam ir para o endereço de e-mail padrão (root @ localhost).

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

Qual é a melhor maneira de lidar com isso?

13
Stefan Lasiewski

Configuração [email protected] no /etc/cron.daily/foo nã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/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).

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

Saída do cron

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

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

Às vezes, só quero receber os erros de um cronjob, não do stdout, então uso este truque. A sintaxe pode parecer errada à primeira vista, mas tenha certeza de que funciona. O cronjob a seguir enviará STDOUT para/dev/null e, em seguida, tratará de 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 em ServerFault para Cronjob stderr para arquivo e e-mail

13
Stefan Lasiewski

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 crie o arquivo /etc/cron.d/myscript Como:

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

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

6
codebeard

Assumindo que você tenha SA acesso nesta máquina, você pode criar uma nova conta de usuário, adicionar as tarefas a essas tarefas cron. O e-mail para este usuário pode então ser encaminhado usando um arquivo .forward em esta pasta de início de contas. Você pode ter que configurar permissões para este usuário se as tarefas cron requerem acesso privilegiado.

Se esta ou a resposta de Stefan são mais adequadas, realmente depende de quanto trabalho você deseja ao configurá-lo e se deseja que as mensagens de erro cheguem ao e-mail root ou às pessoas que normalmente monitoram a produção diária.

Boa sorte

0
Michael Shaw