Logrotate: "log no necesita rotar" ¿por qué?


57

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.


Además, recuerde, cuando usa la opción -d, NO ROTA LOS REGISTROS. Te muestra lo que DEBERÍA ejecutar sin la opción, como un plan de juego. Me causó fuertes dolores de cabeza cuando pensé que podía verlos rotar, y luego todavía estaban allí.
Maxwell Flanders

Respuestas:


64

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.


44
En FreeBSD es /var/run/logrotate.status
kaleissin

También verifique el posible uso del argumento -s en la invocación para la ubicación del archivo de estado
JGurtz

2
-d+ -fhace que el informe logrotate "necesite rotación" para todos los archivos, incluso los que no coinciden
Fluffy

Para agregar a esto, editar la fecha en el archivo de estado para que sea anterior a la política de rotación es suficiente para convencerlo de logrotateque necesita rotar el registro cuando vuelva a ejecutarse.
Centimane

En CentOS, modifiqué /var/lib/logrotate.status para que logrotate funcione. Como lo indica EightBitTony, el logrotate diario recordará el historial. A menos que el archivo ya esté en el historial con una fecha en el pasado, logrotate no rotará el archivo.
Mark

58

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/statusel 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


5

A veces, incluso si ejecuta logrotate manualmente, esto no funcionará si lo hace el mismo día y dateextsi 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 ejemplo size 200M). Al menos en CentOS 6, logrotate no podrá rotar su archivo de registro porque ya existe.

Para solucionar esto, es necesario utilizar dateformaten lugar de dateext, con un valor como: %Y%m%d%s.

Ver man logrotatepara más información.


1

Tenga cuidado al ejecutar

logrotate -vdf /etc/logrotate.conf

el evento, aunque solo se simule, se registrará /var/lib/logrotate.status y las ejecuciones posteriores de logrotate responderán con lo mencionado

log does not need rotating

1
No puedo reproducir eso en Ubuntu (16.04 y 17.04). Si se usa "/var/lib/logrotate.status", debe usar otra distribución. Ubuntu inicia sesión en "/ var / lib / logrotate / status".
Philipp Claßen

2
@Philipp Claßen: Tiene razón, esto (archivo de estado colocado en /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?
helvete

1
Si, esta bien. Solo lo mencionaría porque Ubuntu es muy popular. Supongo que muchas personas leen esta pregunta porque quieren arreglar su servidor, que hoy a menudo se ejecuta con Ubuntu.
Philipp Claßen

1
OK, eso está bien. Para completar, puedo agregar que la ubicación del archivo de estado en la distribución de Centos 7 está en/var/lib/logrotate/logrotate.status
helvete
Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.