Tengo la siguiente nueva configuración de logrotate:
/var/log/nexus/nexus.log {
rotate 7
missingok
compress
delaycompress
copytruncate
daily
}
Cuando corro logrotate -d nexus
, obtengo lo siguiente:
reading config file nexus
reading config info for /var/log/nexus/nexus.log
Handling 1 logs
rotating pattern: /var/log/nexus/nexus.log after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/nexus/nexus.log
log does not need rotating
Mi carpeta / var / log / nexus / contiene lo siguiente:
nexus.log
oldlogs.tar.gz
¿Por qué LogRotate no gira el archivo nexus.log? Lo que esperaba era que el archivo nexus.log se hubiera truncado y se hubiera creado un nuevo archivo, algo así como nexus.log-201106241000.
Respuestas:
Lo más probable es que el archivo de registro tenga menos de un día de antigüedad y / o se haya rotado en el último día y logrotate recuerda el historial.
Si lo agrega
-f
, forzará una rotación si realmente lo desea (aunque no está 100% seguro de cómo interactúa-d
).Puede ver el historial, la ubicación depende de su distribución, pero puede ser
/var/lib/logrotate/status
. Ese archivo muestra cuándo se giraron los registros por última vez.fuente
-d
+-f
hace que el informe logrotate "necesite rotación" para todos los archivos, incluso los que no coincidenlogrotate
que necesita rotar el registro cuando vuelva a ejecutarse.La primera vez que ejecuta logrotate con una nueva configuración de registro, no sabe cuándo se produjo la última rotación de registro, por lo que simplemente escribe una línea de estado en
/var/lib/logrotate/status
el sentido de que se ejecutó hoy.Cuando posteriormente se ejecuta al día siguiente, ve que el registro tiene un día de antigüedad y lo gira como se esperaba. Si no desea esperar, edite el archivo de estado de logrotate y escriba la fecha de estado de su registro al día anterior.
Cuando ejecute logrotate manualmente, funcionará como se esperaba
fuente
A veces, incluso si ejecuta logrotate manualmente, esto no funcionará si lo hace el mismo día y
dateext
si el valor predeterminado no incluye segundos (por ejemplo-%Y%m%d
). Ni siquiera si modifica el archivo de estado de logrotate o cuando usa la directiva de tamaño (por ejemplosize 200M
). Al menos en CentOS 6, logrotate no podrá rotar su archivo de registro porque ya existe.Para solucionar esto, es necesario utilizar
dateformat
en lugar dedateext
, con un valor como:%Y%m%d%s
.Ver
man logrotate
para más información.fuente
Tenga cuidado al ejecutar
el evento, aunque solo se simule, se registrará
/var/lib/logrotate.status
y las ejecuciones posteriores de logrotate responderán con lo mencionadofuente
/var/lib/logrotate.status
) se ha observado al depurar la configuración de Logrotate 3.10 en Alpine linux 3.5 dentro de un contenedor acoplable. Pero no hay una bandera de Ubuntu en la definición de la pregunta, ¿verdad?/var/lib/logrotate/logrotate.status