¿Cómo puedo evitar que cron llene mi syslog?

32

Tengo un script que debe ejecutarse cada minuto. El problema es que cron inicia sesión /var/log/syslogcada vez que se ejecuta. Termino viendo algo como esto repetido una y otra vez en /var/log/syslog:

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

Estoy usando Debian

Mi pregunta es: ¿Hay alguna forma de decirle a cron que no escriba esta información en syslog cada vez?

usuario7321
fuente
1
¿Alguna idea de cómo hacer esto en una plataforma Busybox? El formato de /etc/syslog.conf es diferente ...
Mark Lakata

Respuestas:

25

Puede enviar la salida de cron a una instalación de registro separada; agregue lo siguiente a su /etc/syslog.confarchivo:

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

Recuerde agregar /var/log/crona su /etc/logrotate.d/syslogpara asegurarse de que se gira, por ejemplo

# /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
}
Dave Cheney
fuente
Gracias por la aportación. Agregué cron. * / Var / log / cron y reinicié cron pero continúa volcando los mensajes en / var / log / syslog mientras deja / var / log / cron vacío. no estoy seguro de por qué no está haciendo nada
user7321
1
oh hombre, fracaso épico de mi parte. Estaba editando syslog.conf y reiniciando cron !! No es de extrañar que no funcione. Debería haber reiniciado syslog =)
user7321
1
Habilitar cron.log no evita que los mensajes cron se escriban en syslog.
básico6
16

Okay,

La solución a mi pregunta fue:

cambio

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

a

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

dentro /etc/syslog.confy luego reiniciar syslog

También me enviaron cron /var/log/cron.logsegún lo sugerido por Dave Cheney y le puse un logrotate. Mi solución con la sugerencia de Daves es óptima para mi situación porque:

  1. evita que /var/log/syslogesté lleno de mensajes cron
  2. Todavía recibo mensajes cron (lo cual es bueno para solucionar problemas)
  3. logrotate evita /var/log/cron.logque sea demasiado grande.
usuario7321
fuente
77
Para aquellos preocupados por los sistemas modernos, hay un rsyslogDebian 8.0 Jessie, por lo /etc/rsyslog.confque debe editarse. Por cierto, las cadenas que se agregarán ya están allí de forma predeterminada, solo necesita descomentarlo (línea 63). Y /var/log/cron.logya está en el /etc/logrotate.d/syslog, al igual que los encargados del paquete han leído este hilo.
TranslucentCloud
Tu pregunta fue Is there any way I can tell cron not write this information to syslog every time. Esta no es la respuesta.
ntd
@TranslucentCloud Solo quería agregar que mi configuración de rsyslog en ubuntu 14 LTS estaba en /etc/rsyslog.d/50-default.conf.
Johnny
8

Cambiar / 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 defecto, la línea EXTRA_OPTS es ""

dfc
fuente
Esta IMO es la solución correcta: no genere el registro de registro.
ntd
4

En Ubuntu 14.04.5 (y probablemente en otros lugares) hay rsyslogd en lugar de syslogd. TranslucentCloud insinuó esto con Debian Jessie, pero la misma solución (pero cambiar rsyslog.conf en lugar de syslogd.conf) no parece funcionar en Ubuntu.

Parece que los valores establecidos en /etc/rsyslog.d/50-default.conf tendrán prioridad sobre los elementos establecidos en /etc/rsyslog.conf, por lo que es mejor hacer los cambios allí y luego reiniciar rsyslog y cron. De lo contrario, terminará con el comportamiento predeterminado del registro cron en syslog, más el registro cron en cronlog (pero no exclusivamente).

Primer par de líneas en mi /etc/rsyslog.d/50-default.conf:

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

¡Y voilá!

ericus
fuente
1
Muy buena respuesta. Dicho esto, es posible que desee centrarse en preguntas más recientes para la participación futura en Stack Overflow, ya que esta es extremadamente antigua.
Magellan
3

Simplemente resolví esto de una manera diferente, pero mi objetivo era ligeramente diferente. Quería descartar las entradas de registro cron que se generaron cuando se activó una ejecución para que mis discos duros pudieran dormir y no despertarse cada 5 minutos.

Puede hacer que el destino de un evento de registro en syslog.conf sea un comando de shell prefijándolo con la tubería, por lo que utilicé grep para descartar los que no quería. Asi que:

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

No he investigado, pero creo que debería ser posible enviar esas entradas de registro a otro objetivo si aún se desean.

Parakleta
fuente
3

En realidad, la solución 'mejor' (se podría afirmar) es una combinación de lo que sugirió @DaveCheney y lo que hizo eventualmente user7321 , más una tercera acción que recomendaría:

  1. Evitar que syslogd agregue mensajes de registro relacionados con cron a / var / log / syslog
  2. Asegurar que los mensajes de registro cron se registren en algún lugar (específicamente, en / var / log / cron) + asegurando la rotación del registro cron.
  3. Evitar que syslogd agregue mensajes de registro relacionados con cron a / var / log / messages también

En su /etc/syslog.conf, la combinación de estas sugerencias cambia algo como lo siguiente:

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

dentro:

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

Y no olvide forzar la recarga (o reiniciar) los servicios cron y syslogd, por ejemplo, usando:

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

Nota: Esto también funciona con rsyslogd.

einpoklum - reinstalar a Monica
fuente
La mejor solución es lo que sugirió @dfc, es decir, no generar el registro en primer lugar.
ntd