Logrotate elimina los archivos según el orden en la lista ordenada léxicamente de nombres de archivos de registro rotados, y también por antigüedad del archivo (usando la hora de la última modificación del archivo)
-
girar es el número máximo de archivos rotados que puede encontrar. Si hay una mayor cantidad de archivos de registro rotados, sus nombres se ordenan léxicamente y se eliminan los más pequeños léxicamente.
-
máximo define otro criterio para eliminar archivos de registro rotados. Se elimina cualquier archivo de registro rotado que sea más antiguo que el número de días dado. Tenga en cuenta que la fecha se detecta a partir de la hora de la última modificación del archivo, no del nombre del archivo.
-
formato de fecha permite un formato específico para la fecha en archivos rotados. La página del manual señala que el formato dará como resultado una clasificación léxicamente correcta .
-
fecha de ayer permite usar fechas en nombres de archivos de registro de un día atrás.
Para mantener el número de días dado en los archivos rotados diariamente (por ejemplo, 7), debe establecer rotate
al valor de 7 y puede ignorar maxage
, si sus archivos se crean y rotan realmente todos los días.
Si la creación de registros no ocurre durante un par de días, p. durante 14 días, la cantidad de archivos de registro rotados seguirá siendo la misma (7).
maxage
mejorará la situación en escenarios de "registros no producidos" eliminando siempre los archivos demasiado antiguos. Después de 7 días sin producción de registros, no habrá archivos de registro rotados.
No puede usar dateformat
como muestra OP, ya que no se puede ordenar léxicamente. Un error con dateformat
probablemente daría como resultado la eliminación de otros archivos de registro rotados de los que realmente deseaba.
Consejo :Ejecute logrotate desde la línea de comando con -d
opción para realizar una ejecución en seco:verá lo que haría logrotate pero en realidad no hace nada. Luego realice una ejecución manual usando -v
(verbose) para que puedas confirmar que lo que se hace es lo que quieres.
Solución:limpiar registros creados por cron
El concepto es:
Deje que cron cree y actualice los archivos de registro, pero haga pequeñas modificaciones para crear archivos, siguiendo los nombres de archivo estándar de logrotate cuando use el dateext
predeterminado
/data/tier2/scripts/logs/recover_standby_SID.log-`date +\%Y\%m\%d`.log
Use logrotate solo para eliminar archivos de registro demasiado antiguos
- apunte a un archivo de registro no existente
/data/tier2/scripts/logs/recover_standby_SID.log
- usa
missingok
para permitir que ocurra la limpieza logrotate - establecer
rotate
lo suficientemente alto, para cubrir la cantidad de archivos de registro que se deben mantener (al menos 7, si habrá un archivo de registro "girado" por día, pero puede configurarlo con seguridad en un nivel muy alto, como 9999) - establecer
maxage
a 7. Esto eliminará los archivos que tengan un tiempo de última modificación superior a 7 días. dateext
se usa solo para garantizar que logrotate busque archivos más antiguos que parezcan rotados.
El archivo de configuración de Logrotate se vería así:
data/tier2/scripts/logs/recover_standby_SID.log {
daily
missingok
rotate 9999
maxage 7
dateext
}
Solución:rotar directamente por logrotate una vez al día
No estoy seguro de cómo se crea el archivo de reserva de recuperación de fuente, pero supongo que Oracle o algún script suyo se agrega regular o continuamente a un archivo /data/tier2/scripts/logs/recover_standby_SID.log
El concepto es:
- girar el archivo una vez al día con
logrotate
- trabajar directamente con el archivo de registro que contiene datos de recuperación
/data/tier2/scripts/logs/recover_standby_SID.log
daily
provocará la rotación una vez al día (en términos de cómocron
entiendedaily
)rotate
debe establecerse en 7 (o cualquier número mayor).maxage
establecido en 7 (días)dateext
para usar el sufijo de fecha logrotate predeterminadodateyesterday
solía hacer que los sufijos de fecha en los archivos rotados fueran de hace un día.missingok
para limpiar archivos antiguos incluso cuando no hay contenido nuevo para rotar.
La configuración de Logrotate se vería así:
data/tier2/scripts/logs/recover_standby_SID.log {
daily
missingok
rotate 7
maxage 7
dateext
dateyesterday
}
Tenga en cuenta que es posible que deba jugar un poco con copytruncate
y otras opciones similares que están relacionadas con cómo se crea el archivo de registro de origen mediante un proceso externo y cómo reacciona al acto de rotación.