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!

Brad
fonte

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.

Tomáš Diviš
fonte
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.

Kamil Kisiel
fonte
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"
innaM
fonte
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.

Adão
fonte
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.

geekmonkey
fonte
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.

Justin Ellison
fonte
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.)

dubiousjim
fonte
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 /

lalit
fonte