rotate log forzar ejemplos ejecucion configurar conf linux oracle logrotate

linux - forzar - logrotate ubuntu



Logrotate para limpiar los archivos con fecha estampada (6)

¡Puedes usar el comando de find para hacer esa tarea fácilmente! Se eliminarán todos los archivos de 7 Days edad. Póngalo en crontab y corra todas las noches:

$ cd /data/tier2/scripts/logs/ $ /usr/bin/find . -mtime +7 -name "*.log" -print -delete

O mejor manera

$ /usr/bin/find /data/tier2/scripts/logs/ -mtime +7 -name "*.log" -print -delete;

Actualmente estoy tratando de encontrar un método para ordenar los archivos de registro de Oracle Recover creados por Cron ...

Actualmente, Cron invoca nuestro proceso de recuperación en espera de Oracle cada 15 minutos mediante el siguiente comando:

0,15,30,45 * * * * /data/tier2/scripts/recover_standby.sh SID >> /data/tier2/scripts/logs/recover_standby_SID_`date +/%d/%m/%y`.log 2>&1

Esto crea archivos que se parecen a:

$ ls -l /data/tier2/scripts/logs/ total 0 -rw-r--r-- 1 oracle oinstall 0 Feb 1 23:45 recover_standby_SID_010213.log -rw-r--r-- 1 oracle oinstall 0 Feb 2 23:45 recover_standby_SID_020213.log -rw-r--r-- 1 oracle oinstall 0 Feb 3 23:45 recover_standby_SID_030213.log -rw-r--r-- 1 oracle oinstall 0 Feb 4 23:45 recover_standby_SID_040213.log -rw-r--r-- 1 oracle oinstall 0 Feb 5 23:45 recover_standby_SID_050213.log -rw-r--r-- 1 oracle oinstall 0 Feb 6 23:45 recover_standby_SID_060213.log -rw-r--r-- 1 oracle oinstall 0 Feb 7 23:45 recover_standby_SID_070213.log -rw-r--r-- 1 oracle oinstall 0 Feb 8 23:45 recover_standby_SID_080213.log -rw-r--r-- 1 oracle oinstall 0 Feb 9 23:45 recover_standby_SID_090213.log -rw-r--r-- 1 oracle oinstall 0 Feb 10 23:45 recover_standby_SID_100213.log -rw-r--r-- 1 oracle oinstall 0 Feb 11 23:45 recover_standby_SID_110213.log -rw-r--r-- 1 oracle oinstall 0 Feb 12 23:45 recover_standby_SID_120213.log

Básicamente, quiero eliminar los archivos con más de x días de antigüedad, lo cual pensé que logrotate sería perfecto para ...

He configurado logrotate con el siguiente archivo de configuración:

/data/tier2/scripts/logs/recover_standby_*.log { daily dateext dateformat %d%m%Y maxage 7 missingok }

¿Hay algo que me falta para obtener el resultado deseado?

Supongo que podría eliminar la fecha del archivo de registro de Crontab y luego hacer que logrotate gire ese archivo; sin embargo, la fecha en el archivo de registro no reflejará el día en que se generaron los registros ... es decir, las recuperaciones en 010313 se archivarán con fecha de 020313 debido a logrotate disparando en 020313 y girando el archivo ...

¿Alguna otra idea? Y gracias de antemano por cualquier respuesta.

Saludos

Gavin


(Actualizado) Sus opciones son:

  • Como respondió Satish, abandone logrotate y ponga un script de búsqueda en cron
  • Incluso podrías usar logrotate y poner un script de búsqueda en el comando postrote

Inicialmente, pensé que el cambio del formato de fecha para que coincidiera con sus registros podría funcionar, pero como Reid Nabinger señaló que el formato de fecha no era compatible con logrotate de todos modos. Recientemente, intenté configurar lo mismo, pero para los registros girados de Java que quería que logrotate eliminara. Probé la configuración a continuación, pero seguí intentando eliminar todos los registros.

/opt/jboss/log/server.log.* { missingok rotate 0 daily maxage 30 }

Terminé simplemente implementando lo que Satish sugirió: un simple hallazgo con rm script en cron.


De acuerdo con @Jan Vlcinsky, puede dejar que logrotate agregue la fecha; simplemente use dateyesterday para obtener la fecha correcta.

O bien, si desea ingresar la fecha usted mismo, puede "apuntar" al nombre sin la fecha, y luego se limpiarán los nombres con la fecha.

Sin embargo, lo que encontré es que si no tengo un archivo de registro allí, logrotate no hace la limpieza de los archivos con fechas.

Pero si está preparado para tener un archivo de registro vacío por ahí, puede hacerlo funcionar.

Por ejemplo, para limpiar / var / log / mylogfile. yyyymmdd .log después de 7 días, touch /var/log/mylogfile.log , luego configure logrotate de la siguiente manera:

/var/log/mylogfile.log { daily rotate 7 maxage 7 dateext dateformat .%Y%m%d extension .log ifempty create }

Esta entrada, combinada con la existencia de mylogfile.log, activa logrotate para limpiar archivos antiguos, como si hubieran sido creados por logrotate.

daily , maxage plus maxage hace que los archivos de registro antiguos se eliminen después de 7 días (o 7 archivos de registro antiguos, lo que ocurra primero).

dateext , dateformat plus extension hace que logrotate coincida con nuestros nombres de archivos.

Y ifempty más aún, asegúrese de que haya un archivo vacío allí o que la rotación del registro se detenga.

Otro consejo para la prueba, prepárese para editar /var/lib/logrotate.status para restablecer la fecha de ''última rotación'' o logrotate no hará nada por usted.


Logrotate elimina los archivos según el orden en la lista ordenada por léxico de los nombres de los archivos de registro rotados, y también por la antigüedad del archivo (utilizando la hora de la última modificación del archivo)

  • rotar es el número máximo de archivos rotados, puede encontrar. Si hay un número mayor de archivos de registro rotados, sus nombres se ordenan de forma léxica y se eliminan los más pequeños.

  • maxage define otro criterio para eliminar archivos de registro girados. Se elimina cualquier archivo de registro girado, que sea anterior al número de días dado. Tenga en cuenta que la fecha se detecta desde la última hora de modificación del archivo, no desde el nombre del archivo.

  • dateformat permite un formato específico para la fecha en archivos rotados. Las notas de la página de manual, que el formato dará como resultado una clasificación léxicamente correcta .

  • dateyesterday permite usar fechas en nombres de archivos de registro un día atrás.

Para mantener un número determinado de días en los archivos rotados diarios (por ejemplo, 7), debe configurar la rotate en un valor de 7 y puede ignorar el maxage , si sus archivos se crean y rotan realmente todos los días.

Si la creación del registro no se realiza durante un par de días, y durante 14 días, la cantidad de archivos de registro girados seguirá siendo la misma (7).

maxage mejorará la situación en escenarios de "registros no producidos" al eliminar siempre archivos demasiado viejos. Después de 7 días sin producción de registros, no habrá archivos de registro girados.

No puede usar dateformat como muestra OP, ya que no se puede clasificar léxicamente. El desorden con dateformat probablemente resultaría en la eliminación de otros archivos de registro rotados de los que realmente deseaba.

Consejo : Ejecute logrotate desde la línea de comando con la opción -d para realizar una ejecución en seco: verá lo que logrotate haría pero en realidad no hace nada. Luego realice una ejecución manual usando -v (verbose) para que pueda confirmar que lo que está haciendo es lo que desea.

Solución: limpiar los registros creados por cron

El concepto es:

Deje que cron cree y actualice los archivos de registro, pero haga una pequeña modificación para crear archivos, siguiendo los nombres de archivo estándar de logrotate cuando use la fecha predeterminada por defecto

/data/tier2/scripts/logs/recover_standby_SID.log-`date +/%Y/%m/%d`.log

Use logrotate solo para eliminar archivos de registro demasiado viejos

  • apuntar a un archivo de registro no existente /data/tier2/scripts/logs/recover_standby_SID.log
  • usa missingok para permitir que la limpieza logrotate suceda
  • establezca la rotate lo suficientemente alta, para cubrir la cantidad de archivos de registro que se mantendrán (al menos 7, si habrá un archivo de registro "rotado" por día, pero puede establecerlo de manera muy alta, como 9999)
  • establezca el maxage de 7. Esto eliminará los archivos cuya última modificación sea superior a 7 días.
  • dateext se usa solo para asegurar que logrotate busque archivos antiguos que parecen 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 espera de recuperación de origen, pero supongo que Oracle o alguna secuencia de comandos suya se está agregando regularmente o continuamente a un archivo /data/tier2/scripts/logs/recover_standby_SID.log

El concepto es:

  • Gira el archivo una vez al día por logrotate
  • trabajando directamente con el archivo de registro que contiene los datos de recuperación /data/tier2/scripts/logs/recover_standby_SID.log
  • daily causará rotación una vez al día (en términos de cómo cron entiende daily )
  • rotate debe establecer en 7 (o en cualquier número mayor).
  • maxage establecido en 7 (dias)
  • dateext para usar el sufijo de fecha de logrotate predeterminado
  • dateyesterday usado para causar sufijos de fecha en archivos rotados que se devolvieron 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 necesite jugar un poco con copytruncate y otras opciones similares 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.


Para tu información, sé que esta es una pregunta antigua, pero la razón por la que no funciona para ti es porque tu formato de fecha no es léxicamente clasificable. De la página del manual:

dateformat format_string Specify the extension for dateext using the notation similar to strftime(3) function. Only %Y %m %d and %s specifiers are allowed. The default value is -%Y%m%d. Note that also the character separating log name from the extension is part of the dateformat string. The sys- tem clock must be set past Sep 9th 2001 for %s to work correctly. Note that the datestamps generated by this format must be lexically sortable (i.e., first the year, then the month then the day. e.g., 2001/12/01 is ok, but 01/12/2001 is not, since 01/11/2002 would sort lower while it is later). This is because when using the rotate option, logrotate sorts all rotated filenames to find out which logfiles are older and should be removed.

La solución es cambiar a uno que vaya año-mes-fecha, o llamar a un proceso externo para realizar la limpieza.


(No se puede comentar como no tiene suficiente reputación)

Tuve un problema similar Por todas las cuentas logrotate es inútil para su uso en nombres de archivos con marcas de datos incorporadas.

Si todo lo demás fuera igual, probablemente iría a find en un trabajo cron.

Por mis propias razones, quería usar logrotate y, finalmente, encontré una forma: https://.com/a/23108631

En esencia, era una forma de encapsular el trabajo cron en un archivo logrotate. Tal vez no sea la más bonita ni la más eficiente, pero como dije, tenía mis razones.