Como mencionó Zeeshan, las opciones de logrotate size
, minsize
, maxsize
son factores desencadenantes de la rotación.
Para explicarlo mejor. Puede ejecutar logrotate con la frecuencia que desee, pero a menos que se alcance un umbral, como el tamaño de archivo alcanzado o el tiempo apropiado transcurrido, los registros no se rotarán.
Las opciones de tamaño no garantizan que sus registros rotados también tengan el tamaño especificado. Para que se acerquen al tamaño especificado, debe llamar al programa logrotate con la suficiente frecuencia. Esto es crítico.
Para los archivos de registro que se acumulan muy rápidamente (por ejemplo, cientos de MB por día), a menos que desee que sean muy grandes, deberá asegurarse de que se llame a logrotate con frecuencia. esto es crítico.
Por lo tanto, para evitar que su disco se llene con archivos de registro de varios gigabytes, debe asegurarse de que se llame a logrotate con la frecuencia suficiente; de lo contrario, la rotación de registros no funcionará tan bien como desea.
en Ubuntu, puede cambiar fácilmente a la rotación por hora moviendo el script /etc/cron.daily/logrotate a /etc/cron.hourly/logrotate
O agregar
*/5 * * * * /etc/cron.daily/logrotate
A su archivo /etc/crontab. Para ejecutarlo cada 5 minutos.
El size
La opción ignora las opciones de tiempo diarias, semanales y mensuales. Pero minsize y maxsize lo tienen en cuenta.
La página de manual es un poco confusa allí. Aquí está mi explicación.
minsize
gira solo cuando el archivo ha alcanzado un tamaño adecuado y ha transcurrido el período de tiempo establecido. p.ej. minsize 50 MB + diario Si el archivo alcanza los 50 MB antes de que termine el tiempo diario, seguirá creciendo hasta el día siguiente.
maxsize
rotará cuando el registro alcance un tamaño establecido o haya pasado el tiempo apropiado. p.ej. maxsize 50 MB + diario. Si el archivo tiene 50 MB y aún no estamos en el día siguiente, se rotará el registro. Si el archivo tiene solo 20 MB y lo trasladamos al día siguiente, se rotará el archivo.
size
rotará cuando el registro> tamaño. Independientemente de si se especifica cada hora/diario/semanal/mensual. Entonces, si tiene un tamaño de 100M, significa que cuando su archivo de registro es> 100M, el registro se rotará si se ejecuta logrotate cuando esta condición es verdadera. Una vez que se rota, el registro principal será 0 y una ejecución posterior no hará nada.
Así que en el caso del op. Específicamente 50 MB como máximo, usaría algo como lo siguiente:
/var/log/logpath/*.log {
maxsize 50M
hourly
missingok
rotate 8
compress
notifempty
nocreate
}
Lo que significa que crearía 8 horas de registros como máximo. Y habría 8 de ellos con no más de 50 MB cada uno. Dado que dice que obtiene varios gigabytes cada día y, asumiendo que se acumulan a un ritmo bastante constante, y se usa el tamaño máximo, terminará cerca del máximo alcanzado para cada archivo. Por lo tanto, es probable que tengan cerca de 50 MB cada uno. Dado el volumen que construyen, necesitaría asegurarse de que logrotate se ejecute con la frecuencia suficiente para alcanzar el tamaño objetivo.
Como puse cada hora allí, necesitaríamos que logrotate se ejecutara un mínimo de cada hora. Pero dado que se acumulan para decir 2 gigabytes por día y queremos 50 MB... asumiendo una tasa constante de 83 MB por hora. Así que puedes imaginarte si ejecutamos logrotate cada hora, a pesar de establecer maxsize en 50, terminaremos con 83 MB de registro en ese caso. Entonces, en este caso, configurar la ejecución cada 30 minutos o menos debería ser suficiente.
Asegúrese de que logrotate se ejecute cada 30 minutos.
*/30 * * * * /etc/cron.daily/logrotate
Especifica el tamaño del archivo de registro para activar la rotación. Por ejemplo size 50M
activará una rotación de registros una vez que el archivo tenga un tamaño de 50 MB o más. Puedes usar el sufijo M
para megabytes, k
para kilobytes, y G
por gigas. Si no se usa sufijo, se entenderá que significa bytes. Puedes consultar el ejemplo al final. Hay tres directivas disponibles size
, maxsize
y minsize
. Según la página de manual:
minsize size
Log files are rotated when they grow bigger than size bytes,
but not before the additionally specified time interval (daily,
weekly, monthly, or yearly). The related size option is simi-
lar except that it is mutually exclusive with the time interval
options, and it causes log files to be rotated without regard
for the last rotation time. When minsize is used, both the
size and timestamp of a log file are considered.
size size
Log files are rotated only if they grow bigger then size bytes.
If size is followed by k, the size is assumed to be in kilo-
bytes. If the M is used, the size is in megabytes, and if G is
used, the size is in gigabytes. So size 100, size 100k, size
100M and size 100G are all valid.
maxsize size
Log files are rotated when they grow bigger than size bytes even 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 without regard for the last rotation time.
When maxsize is used, both the size and timestamp of a log file are
considered.
Aquí hay un ejemplo:
"/var/log/httpd/access.log" /var/log/httpd/error.log {
rotate 5
mail [email protected]
size 100k
sharedscripts
postrotate
/usr/bin/killall -HUP httpd
endscript
}
Aquí hay una explicación para ambos archivos /var/log/httpd/access.log
y /var/log/httpd/error.log
. Se rotan cada vez que crece más de 100k de tamaño, y los archivos de registro antiguos se envían por correo (sin comprimir) a [email protected]
después de pasar por 5 rotaciones, en lugar de ser eliminado. El sharedscripts
significa que el postrotate
El script solo se ejecutará una vez (después de que se hayan comprimido los registros antiguos), no una vez para cada registro que se rota. Tenga en cuenta que las comillas dobles alrededor del primer nombre de archivo al comienzo de esta sección permiten que logrotate rote los registros con espacios en el nombre. Se aplican las reglas normales de cotización de shell, con ,
y \
caracteres admitidos.