¿rotar diariamente y tamaño?


40

Si se especifica una configuración de logrotate con los parámetros "tamaño" y "diario", ¿cuál tiene prioridad? ¿Dónde se documenta esto? Me gustaría que estas rotaciones ocurran como una operación OR booleana, es decir, si los registros tienen un día de antigüedad, se rotan, O si son más grandes que un cierto tamaño, también se rotarán. Sin embargo, logrotate actualmente solo utiliza la directiva "size" y parece ignorar la directiva "daily". Logrotate está configurado para ejecutarse cada hora. El sistema operativo es Linux, Red Hat y derivados de Debian.

Además, estoy especificando "diariamente" primero, luego "tamaño" desde el inicio del archivo. No estoy seguro de si el orden importa, pero en cualquier caso, uno tiene que venir primero en el archivo de configuración ...

¡Gracias!



> las definiciones locales anulan las globales, y las definiciones posteriores> anulan las anteriores de la página de manual de logrotate 3.8.7
John Bob Joe

Respuestas:


62

Si se utiliza la directiva de tamaño , logrotate ignorará las directivas diarias , semanales , mensuales y anuales . Esto no está claro en la documentación cuando ejecuta el man logrotatecomando. Sin embargo, se puede confirmar en la práctica y se menciona en algunas publicaciones arbitrarias de blog como esta .

Existe una directiva llamada minsize que, según la página del manual logrotate, es la única directiva de tamaño que se puede usar junto con las de tiempo. Sin embargo, todavía no es lo que quieres. Usar minsize con daily básicamente dice: rotar los registros diariamente, pero solo cuando tengan al menos # MB de tamaño .

Hasta la fecha, no he encontrado ninguna manera con logrotate para hacer la condición que necesita: rotar todos los días, a menos que el tamaño exceda #MB, en cuyo caso rotar de inmediato . No creo que esto sea compatible con solo las directivas logrotate. Es posible hacer algunas secuencias de comandos inteligentes a través de las directivas de enlace de secuencia de comandos como prerotate , postrotate , firstaction y lastaction .

Actualización :

A partir de logrotate 3.8.1, maxsizey timeperiodson compatibles juntos, lo que sería la solución ideal. Vea la respuesta a esta publicación: ¿Cómo rotar el registro en función de un intervalo a menos que el registro exceda un cierto tamaño?


44
La mejor opción probablemente sería usar dos comandos cron separados, ejecutarlos para ejecutarlo diariamente con la configuración predeterminada, y uno cada x minutos que tome una configuración con solo los archivos que le preocupan por desbordamiento utilizando la directiva de tamaño y no el diario.
SilverbackNet

8
A partir de logrotate 3.81, maxsizey timeperiodson compatibles. Por serverfault.com/questions/474941/…
belacqua

1
@belacqua Estoy usando 3.8.7 y timeperiod no está en el hombre.
JorgeeFG

La versión correcta es en realidad 3.8.1, no 3.81.
Tom Miller

2

La primera respuesta de @egg es, según mis experiencias con logrotate, ¡no es cierto!

Si diaria, mensual, ... llegado primero y después de que el tamaño de la Directiva, diaria, mensual, ... será ignorado y el tamaño de la Directiva se aplicará al archivo de registro.

De manera similar, cuando uso por primera vez la directiva de tamaño y luego las directivas diarias, semanales, mensuales y anuales , la directiva de tamaño será ignorada.


1

Si agrega Diariamente, rotará cada día incluso si se cumple la condición de Tamaño. Si agrega también la condición de tamaño, puede obtener dos rotaciones en un día, dependiendo de cuán detallado sea el registro.

Si Daily va primero en la secuencia de comandos, entonces Size no se activará


use la opción detallada para ver qué reglas se usan. De mis pruebas, creo que solo se usa la última regla porque las reglas más específicas pueden anular las reglas más generales.
Bram

Más rotaciones están bien, ya que ese sería el comportamiento esperado. (booleano O) Sin embargo, mi problema es que estas rotaciones no están ocurriendo. Parece ser un error (posiblemente una característica) de la rotación de registros, ya que no puedo ver el orden de las directivas siendo importante o documentado en ningún lado.
pantalones de gato

¿Puedes dar un ejemplo de tu logrotate.conf y los archivos que estás tratando de apuntar? Diariamente no tiene una condición distinta de la progresión del tiempo. El tamaño es condicional.
Paul Hickox

/tmp/output.log {tamaño diario 1k rotar 5}
pantalones de gato

1
Este fichero es girada cuando el tamaño es mayor que 1k, pero se no gira al día como se esperaba y deseaba.
pantalones de gato

1

En realidad, mi página de manual en Red Hat parece ser bastante clara sobre las diferencias entre tamaño y tamaño:

tamaño minimo

          Log  files  are rotated when they grow bigger then size bytes,
          but  not  before  the  additionally  specified  time  interval
          (daily,  weekly, monthly, or yearly).  The related size option
          is similar except that it is mutually exclusive with the  time
          interval  options, and it causes log files to be rotated with-
          out regard for the last rotation time.  When minsize is  used,
          both the size and timestamp of a log file are considered.
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.