O cron pode gravar a saída do trabalho em um log * por padrão * (em vez de correio)?


23

Todos sabemos que a maneira correta de lidar com a saída de tarefas cron é redirecioná-la para um arquivo:

0 * * * * /bin/date >> /var/log/date.log 2>&1

No entanto, às vezes os administradores são preguiçosos, esquecem ou ignoram e não colocam esses redirecionamentos; nesse caso, a saída do trabalho é enviada para $ MAILTO ou para o usuário ou raiz proprietário. Em algumas das caixas que eu gerencio, o correio está desabilitado, portanto essa saída entra em um buraco negro. O que eu queria saber é: existe alguma maneira de dizer ao cron para pegar qualquer saída do trabalho e, em vez de enviá-lo, jogá-lo em um arquivo de log abrangente em algum lugar? Estou usando o Ubuntu (8.04, mas migrando para o 9.04). Há uma dica dessa solução nesse resultado aleatório do Google , mas acho que o OP pode ter ficado confuso sobre a saída do cron versus a saída dos trabalhos do cron.

Estou aberto a soluções que envolvam scripts ou hackers, mas, idealmente, esse seria um bit de configuração que eu poderia definir em algum lugar. Não vejo nenhuma dica man cron. Obrigado!

Respostas:


1

Para o croniecron (recomendado por exemplo pelo Gentoo Handbook), existe o argumento "-s" para a chamada do cron, que envia a saída do trabalho para o log do sistema usando o syslog.


3

A resposta curta é não, o cron envia para o proprietário do crontab por design. No cron padrão, não há como mudar isso.

O melhor que posso pensar é configurar os MTAs nas máquinas em que você deseja que esse comportamento despeje o email em um arquivo de log em vez de em uma caixa de correio do usuário.


3

Não sei ao certo o que você quer dizer exatamente quando diz "o email está desativado". Mas talvez você possa criar um apelido /etc/aliasesdirecionado a um pipe? Algo como

root: "|/bin/cat >> /var/log/cron.log"

root: /var/log/cron.lognão funciona? feep.net/sendmail/tutorial/intro/aliases.html
endolith

Nem faz nada por mim.
endolith 29/11

Isso pode funcionar apenas se você estiver executando o sendmail como seu MTA. Isso está se tornando menos comum. (Sim, eu sei que eu estou respondendo a um comentário de 5 anos de idade!)
Alex L

2

Eu não acho que o que você está pedindo é realmente possível com o Ubuntu (ou qualquer outro) cron.

Além da ideia de geekmonkeys, você também pode definir $ MAILTO para uma conta local e rotear a saída através do procmail.


1

Nunca ouvi falar dessa configuração para o cron, então eu usaria a rota de script.

Crie um trabalho cron para patrulhar / var / spool / cron / * e acrescente o redirecionamento a qualquer trabalho que não possua um.


1

Outra opção seria criar um script de shell chamado cron_wrapper ou algo assim, e fazer com que ele fizesse algo assim:

#! / bin / sh

eval "$ * >> /var/log/cronlog.log"
sair $?

Então, todos os seus crontabs precisam apenas de algo assim:

* * * * * / usr / local / bin / cron_wrapper echo olá

Observe que não testei esse código, é apenas uma ideia.


1
Isso não resolve o problema. Se as pessoas não se lembram de configurar o MAILTO ou redirecionar o stdout para um arquivo, elas não se lembram de executar as coisas no wrapper.
217 Kamil Kisiel

1

Não sei o que é o "cron padrão". Existem muitos daemons cron, diferentes distros usam diferentes. O cron Vixie é o mais amplamente implantado, então é provavelmente isso que você quis dizer. Mas em algumas distros, não seria o padrão.

Eu assumi o desenvolvimento do cron (dcron) de Dillon , que é o padrão no Arch Linux. Outras distribuições também o usam, mas não sei se é o padrão em outro lugar. O dcron tem uma opção de chamada -Mpara especificar que você deseja usar um script personalizado em vez do sendmail. O script é chamado sem argumentos e com alguns cabeçalhos de email e a &>saída de qualquer cronjobs como stdin. (Se não houver &>saída, o script não será chamado.)


1

por que não configuramos MAILTO = "" em particular o crontab do usuário. Isso desativará o registro de mensagens de correio em / var / spool / mail /

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.