Sí, hay una manera adecuada: no borras registros en absoluto. Los giras . La rotación implica cambiar la salida del registro a un nuevo archivo, con el mismo nombre, con los N archivos de registro anteriores guardados bajo un conjunto de N nombres de archivos relacionados.
La forma en que uno rota los registros depende de cómo se están escribiendo en primer lugar. Este es un punto que a menudo se pasa por alto. Algunas de las respuestas aquí tocan al menos, mencionando que algunos programas de registro mantienen un descriptor de archivo abierto para el archivo de registro, por lo que solo eliminar el archivo no liberará espacio, o incluso cambiará la salida a un archivo de registro nuevo.
Si el programa que escribe el archivo de registro es multilog
del daemontools
paquete , por ejemplo, entonces no hace nada para rotar los registros en absoluto: sin scripts manuales, sin cron
trabajos. Simplemente diga multilog
que la salida del registro es a un directorio, y mantendrá un conjunto de N archivos de registro rotados automáticamente y con un tamaño limitado en ese directorio.
Si el programa que escribe los archivos de registro es svlogd
del runit
paquete , para otro ejemplo, entonces se aplica lo mismo. No hace nada aparte de apuntar la herramienta a un directorio. En sí mismo mantendrá un conjunto de N archivos de registro rotados automáticamente y con límite de tamaño en ese directorio.
Si está utilizando rsyslog
para escribir archivos de registro, entonces se le puede decir al programa de registro que se detenga después de que el archivo de registro alcance un cierto tamaño y ejecute un script . Debe escribir el meollo de la secuencia de comandos, para cambiar el nombre del archivo de registro y eliminar los archivos de registro antiguos en función de las restricciones de tamaño total, pero al menos el programa de registro ha cerrado el archivo y pausó la escritura del registro mientras esto sucede.
La antigua syslogd
forma de rotar los registros, aún esperada por los programas de registro como syslog-ng y como lo ejemplifican las herramientas como se logrotate
menciona djangofan
en otra respuesta aquí, es algo más azarosa. Uno ejecuta un cron
trabajo que periódicamente renombra los archivos de registro y reinicia el demonio de registro (utilizando cualquier supervisor de demonio con el que se esté ejecutando). El problema con esto, por supuesto, es que no impone un límite de tamaño general. En las semanas lentas se pueden obtener N archivos de registro diarios muy pequeños, mientras que en los días ocupados se puede obtener 1 archivo de registro muy grande que está muy por encima del límite de tamaño.
Es por eso que más tarde y mejores herramientas tienen multilog
y svlogd
tienen opciones de configuración de tamaño de archivo y, de hecho, verifican los tamaños de archivo de registro. El mundo ha aprendido que sondear los registros en un horario con cron
trabajos, o incluso un logrotate
demonio, deja ventanas para que el tamaño sea incorrecto, y que el lugar adecuado para realizar estos controles, y de manera rigurosa imponga límites de tamaño definidos por el administrador para que uno los archivos de registro nunca se tragan la partición en la que se encuentran, está en el programa que en realidad está escribiendo los archivos en primer lugar.