Como posso evitar que o cron preencha meu syslog?

30

Eu tenho um script que precisa ser executado a cada minuto. O problema é que o cron está logando em /var/log/syslog toda vez que é executado. Acabo vendo algo assim repetido várias vezes em /var/log/syslog :

Jun 25 00:56:01 myhostname /USR/SBIN/CRON[1144]: (root) CMD (php /path/to/script.php > /dev/null)

Estou usando o Debian.

Minhas perguntas são: Existe alguma maneira que eu possa dizer ao cron não escrever essas informações para o syslog toda vez?

    
por user7321 25.06.2009 / 03:00

6 respostas

15

Ok,

A solução para minha pergunta foi:

mudar

*.*;auth,authpriv.none     -/var/log/syslog

para

*.*;cron,auth,authpriv.none     -/var/log/syslog

dentro de /etc/syslog.conf e reinicie o syslog

Eu também tenho o cron sendo enviado para /var/log/cron.log como sugerido por Dave Cheney e coloquei um logrotate nele. Minha correção com a sugestão de Daves é ótima para minha situação porque:

  1. impede que /var/log/syslog fique confuso com as mensagens do cron
  2. Ainda recebo mensagens do cron (o que é bom para solucionar problemas)
  3. logrotate impede que /var/log/cron.log seja muito grande.
por 25.06.2009 / 06:11
25

Você pode enviar a saída do cron para um recurso de log separado e adicionar o seguinte ao seu arquivo /etc/syslog.conf :

# Log cron stuff
cron.*                                                  /var/log/cron

Lembre-se de adicionar /var/log/cron ao seu /etc/logrotate.d/syslog para garantir que seja rotacionado, por exemplo

# /etc/logrotate.d/syslog
/var/log/messages /var/log/secure /var/log/maillog /var/log/spooler /var/log/boot.log /var/log/cron {
    sharedscripts
    postrotate
    /bin/kill -HUP 'cat /var/run/syslogd.pid 2> /dev/null' 2> /dev/null || true
    endscript
}
    
por 25.06.2009 / 03:07
8

Alterar / etc / default / cron

  # Or, to log standard messages, plus jobs with exit status != 0:
  # EXTRA_OPTS='-L 5' 
  #
  # For quick reference, the currently available log levels are:
  #   0   no logging (errors are logged regardless)
  #   1   log start of jobs
  #   2   log end of jobs
  #   4   log jobs with exit status != 0
  #   8   log the process identifier of child process (in all logs)
  #
  EXTRA_OPTS="-L 0"

Por padrão, a linha EXTRA_OPTS é ""

    
por 31.05.2013 / 19:55
3

Eu apenas resolvi isso de uma maneira diferente, mas meu objetivo era um pouco diferente. Eu queria descartar as entradas de log do cron que foram geradas quando o atrun foi acionado, para que meus discos rígidos pudessem dormir e não serem acordados a cada 5 minutos.

Você pode fazer com que o destino de um evento de log no syslog.conf seja um comando de shell prefixando-o com o pipe e, por isso, usei o grep para jogar fora os que eu não queria. Então:

cron.*              | grep -v "(/usr/libexec/atrun)" >> /var/log/cron.log

Eu não investiguei, mas acredito que seja possível enviar essas entradas de log para outro alvo se elas ainda forem desejadas.

    
por 18.06.2014 / 17:29
3

Na verdade, a solução 'melhor' (pode-se afirmar) é uma combinação do que o @DaveCheney sugeriu e o que user7321 fez eventualmente , além de uma terceira ação que eu recomendaria:

  1. Evitando que o syslogd acrescente mensagens de log relacionadas ao cron em / var / log / syslog
  2. Garantir que as mensagens de log do cron sejam registradas em algum lugar (especificamente, em / var / log / cron) + garantindo a rotação do log para o log do cron.
  3. Evitando que o syslogd inclua mensagens de log relacionadas ao cron em / var / log / messages, bem

No seu /etc/syslog.conf , a combinação dessas sugestões muda algo como o seguinte:

*.*;cron,auth,authpriv.none                         -/var/log/syslog
auth,authpriv.none;daemon.none;mail,news.none       -/var/log/messages

para:

cron.*                                              /var/log/cron.log
*.*;cron,auth,authpriv.none                         -/var/log/syslog
auth,authpriv.none;cron,daemon.none;mail,news.none  -/var/log/messages

E não se esqueça de forçar o recarregamento (ou reiniciar) os serviços cron e syslogd, por exemplo. usando:

/etc/init.d/syslogd force-reload
/etc/init.d/cron force-reload

Nota: Isso também funciona com o rsyslogd.

    
por 29.03.2013 / 14:28
3

No Ubuntu 14.04.5 (e provavelmente em outro lugar) existe o rsyslogd ao invés do syslogd. TranslucentCloud sugeriu isso com o Debian Jessie, mas a mesma solução (mas mudando o rsyslog.conf ao invés do syslogd.conf) não parece funcionar no Ubuntu.

Parece que os valores definidos em /etc/rsyslog.d/50-default.conf terão precedência sobre o conjunto de coisas em /etc/rsyslog.conf, por isso é melhor fazer as alterações e reinicie o rsyslog e o cron. Caso contrário, você ainda terminará com o comportamento padrão de registro cron no syslog, plus cron registrando no cronlog (mas não exclusivamente).

Primeiras linhas no meu /etc/rsyslog.d/50-default.conf:

*.*;cron,auth,authpriv.none     -/var/log/syslog
cron.*                          /var/log/cron.log

E voila!

    
por 11.04.2017 / 22:12