¿Cómo funciona logrotate?

¿Cómo funciona logrotate?

Estoy intentando monitorear un archivo de registro que rota con frecuencia mediante logrotate. pero no puedo entenderlo correctamente. ¿Alguien puede explicar cómo funciona realmente logrotate?

¿Se cambia el nombre de un archivo y se crea un archivo nuevo?

¿O se copia un archivo con un nuevo nombre y se vacía el archivo actual?

Antes de la rotación:

131887 -rw-r--r-- 1 root root  11385 Sep 25 03:40 /var/log/sas.log

Después de la rotación:

131887 -rw-r--r-- 1 root root  0 Sep 25 04:40 /var/log/sas.log

131911 -rw-r--r-- 1 root root   11385 Sep  25 04:40 /var/log/sas.log.1

Respuesta1

Si la opción truncar está habilitada en el archivo de configuración, entonces el archivo no se moverá; su contenido solo se copiará a otro archivo recién creado y el archivo actual se borrará, por lo que la identificación del inodo no cambiará. En realidad, el archivo nunca se modifica.

Respuesta2

Tras la rotación, el archivo de registro actual se mueve y posiblemente se comprime si así se especifica. Luego se crea de nuevo. [buscando una fuente distinta a mi experiencia]

Esto es un problema si se está ejecutando un servicio que tiene el archivo de registro abierto en el momento de la rotación. El archivo se desvinculará, pero el espacio en disco no se liberará realmente porque el archivo todavía está abierto.

Es por eso que los servicios suelen instalar un script logrotate más elaborado que maneja la rotación. Como ejemplo, mire /etc/logrotate.d/nginxla definición del comportamiento de rotación para el nginxservidor web:

[....]
postrotate
    invoke-rc.d nginx rotate >/dev/null 2>&1
endscript

El postrotatebloque se ejecuta después de que se haya creado el nuevo archivo de registro. Invoca el script de servicio de nginx y rotatele indica al servicio quereabrir su archivo de registro.

información relacionada