Limpieza de archivos de registro en Linux

10

Estoy usando una máquina virtual kvm ubuntu 10.04 para probar algunas características de un módulo de kernel. Reviso los /var/logarchivos para observar los mensajes del núcleo sobre ese módulo.

Para comenzar desde un estado limpio, elimino los archivos de registro que contienen mensajes antiguos ejecutando rm -rf /var/log/*y luego reiniciando la máquina virtual. Sin embargo, después de reiniciar, los nuevos archivos de registro todavía contienen esos viejos mensajes de registro. Se necesitan entre 5 y 6 ciclos para eliminar archivos y reiniciar la máquina virtual para finalmente deshacerse de esos mensajes de archivo de registro.

¿Por qué está pasando esto? ¿Hay alguna manera más fácil de limpiar los archivos de registro?

contemplandozombie
fuente
logrotatees el software oficial de Linux para eliminar y rotar registros automáticamente.
Hanan N.
No quería rotar. Solo límpialos.
contemplatingzombie
1
Lo siguiente parece funcionar para mí: 1. rm -rf / var / log / * 2. dmesg -c 3. reiniciar Dado que esto funciona, creo que el núcleo lee los mensajes de registro anteriores durante el arranque, los mantiene en el búfer y los escribe a los archivos una vez más durante el reinicio. Si alguien sabe más sobre el mecanismo real, actualícelo.
contemplatingzombie

Respuestas:

7

La forma más fácil de limpiar los registros antiguos es no eliminarlos.

La mejor manera de limpiar los registros es logrotatecomo Hanan N. señaló o:

find /var/log -type f -exec /bin/cp /dev/null {} \;

para cada uno de los archivos de registro. No estoy exactamente seguro de a qué entradas de registro se refiere desde el inicio anterior, pero si desea que esto se borre después del inicio, puede colocar el comando anterior en el /etc/rc.localscript para que todo el registro se realice después del inicio.

Normalmente, aunque no desea borrar los registros, ya que son su punto de partida en todas las soluciones de problemas.

Karlson
fuente
Creo que el comando 'cp' copiaría todos los registros sobre el último nombre de archivo expandido ... tal vez quisiste decir find /var/log/* -exec cp /dev/null {} \;:?
jjmontes
@jjmontes Gracias. No pude encontrar el comando find en ese momento. :) Pero en realidad cambiaría a la forma en que
edité
3

Para lo que está haciendo, puede ser mejor agregar un archivo de registro adicional para los mensajes del núcleo. Algunos demonios de registro le permitirán realizar coincidencias en los registros que se están escribiendo, de modo que solo obtenga los registros apropiados en su archivo. Luego puede rotar, eliminar o cambiar el nombre de los archivos entre ejecuciones. (Si no reinicia, es posible que deba enviar una señal HUP al demonio de registro para que vuelva a abrir sus archivos.

También hay herramientas que extraerán solo nuevos registros del registro. La logtailutilidad del logcheckpaquete es una de esas utilidades. Se puede ejecutar con un archivo de desplazamiento alternativo.

Existen otras herramientas que miran los registros para buscar registros que coincidan con un patrón y los reporten. Uno de estos podría funcionar bien para usted.

BillThor
fuente
1

Esto parece funcionar bien (en Ubuntu LTS 14.04) girando sus registros a un registro limpio y luego eliminando las entradas de registro anteriores. Es similar al método cp / dev / null, pero creo que es más limpio. ymmv

logrotate --force /etc/logrotate.conf
find /var/log/ -name '*[0-5]*' -exec rm {} \;
flickerfly
fuente