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/nginx
la definición del comportamiento de rotación para el nginx
servidor web:
[....]
postrotate
invoke-rc.d nginx rotate >/dev/null 2>&1
endscript
El postrotate
bloque se ejecuta después de que se haya creado el nuevo archivo de registro. Invoca el script de servicio de nginx y rotate
le indica al servicio quereabrir su archivo de registro.