sql >> Base de Datos >  >> RDS >> Oracle

Logrotate para limpiar archivos con sello de fecha

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ómo cron entiende daily )
  • rotate debe establecerse en 7 (o cualquier número mayor).
  • maxage establecido en 7 (días)
  • dateext para usar el sufijo de fecha logrotate predeterminado
  • dateyesterday 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.