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.

Rico
fuente
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.

OchoBitTony
fuente
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

Tony Sweeney
fuente
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.

emerino
fuente
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
helvete
fuente
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