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

21

Todos nós sabemos que o caminho certo para lidar com a saída de tarefas cron é redirecioná-lo para um arquivo:

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

No entanto, às vezes os administradores são preguiçosos, esquecidos ou ignorantes e não inserem esses redirecionamentos; Nesse caso, a saída do trabalho é enviada para $ MAILTO ou para o usuário ou root proprietário. Em algumas das caixas que eu gerencio, o email está desabilitado, então esta saída entra em um buraco negro. O que eu estou querendo saber é, existe alguma maneira de dizer ao cron para tomar qualquer saída de trabalho e, em vez de enviá-lo, jogá-lo em um arquivo de log pega-tudo em algum lugar? Estou usando o Ubuntu (8.04 mas migrando para 9.04). Há uma sugestão de tal solução neste resultado aleatório do Google , mas acho o OP pode ter ficado confuso sobre a saída do cron versus a saída de tarefas agendadas.

Estou aberto a soluções que envolvem um pouco de script ou hacking, mas, idealmente, isso seria um bit de configuração que eu poderia definir em algum lugar. Não vejo nenhuma sugestão em man cron . Obrigado!

    
por Brad 19.08.2009 / 19:11

8 respostas

1

Para cronie cron (o que é recomendado por exemplo, Gentoo Handbook), há "-s" argumento ao cron chamada, que envia a saída do job no log do sistema usando syslog.

    
por 20.06.2018 / 15:43
3

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

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

    
por 19.08.2009 / 19:57
3

Não sei ao certo o que você quer dizer exatamente quando diz "o correio está desativado". Mas talvez você possa configurar um alias em /etc/aliases direcionado para um pipe? Algo como

root: "|/bin/cat >> /var/log/cron.log"
    
por 19.08.2009 / 21:53
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 por meio do procmail.

    
por 19.08.2009 / 19:59
1

Nunca ouvi falar de tal configuração para o cron, então eu pegaria a rota do script.

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

    
por 19.08.2009 / 19:51
1

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

#!/bin/sh

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

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

* * * * * /usr/local/bin/cron_wrapper echo hello

Note que não testei este código, é apenas uma ideia.

    
por 19.08.2009 / 20:17
1

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

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

    
por 17.02.2010 / 16:55
1

por que não definimos MAILTO="" no crontab do usuário em particular. Isso desabilitará o registro de mensagens de e-mail em / var / spool / mail /

    
por 08.07.2011 / 12:58