¿Cómo puedo rotar muchos archivos de registro en un subdirectorio diferente por rotación?

12

Tengo un directorio con muchos archivos de registro, todos los cuales me gustaría rotar a diario. Para fines organizativos, me gustaría poder mover los registros rotados a un directorio diferente (o subdirectorio) nombrado por fecha, manteniendo la última semana de registros.

Puedo usar logrotate para lograr la mayor parte de esto mediante la rotación de los archivos en el lugar o incluso moverlos a un único directorio diferente usando la olddirdirectiva, pero tengo problemas para encontrar una solución para crear subdirectorios individuales por rotación. ¿Cómo puedo conseguir esto?:

Logs to rotate: /var/log/example/*

Desired target directories (keeping a week):
    /var/log/example/20121006/*
    [ ... ]
    /var/log/example/20121012/*
Dave Forgac
fuente

Respuestas:

9

Debería poder llamar a un script externo en la postrotatedirectiva:

postrotate
  /path/to/your.sh
endscript

y que ese guión haga el movimiento, por ejemplo:

#!/bin/bash

newdir=/var/log/example/`date +%Y%m%d`

mkdir $newdir
mv /var/log/example.1.gz $newdir

find /var/log/example -mindepth 1 -maxdepth 1 -mtime +7 \
  -type d -print0 | xargs -0 rm -rf

Sin embargo, podría ser más fácil usar la dateextdirectiva. Con eso, los archivos rotados se agregarán con una marca de tiempo (aunque no se moverán a un directorio diferente).

Consulte logrotate(8)para más detalles sobre ambas directivas.

Ansgar Wiechers
fuente
Parece que postrotatehará el truco. Lo único que necesito agregar es purgar los directorios antiguos que tienen un cierto recuento o más que una fecha determinada.
Dave Forgac
1
Ver respuesta actualizada. El find | xargscomando debe eliminar todos los subdirectorios inmediatos de /var/log/examplesi se modificaron por última vez hace más de 7 días.
Ansgar Wiechers
1

Tiene una olddirdirectiva que puede usar en el archivo de configuración.

De la documentación:

olddir
Los registros se mueven al directorio para la rotación. El directorio debe estar en el mismo dispositivo físico que el archivo de registro que se está rotando, y se supone que es relativo al directorio que contiene el archivo de registro a menos que se especifique un nombre de ruta absoluto. Cuando se usa esta opción, todas las versiones antiguas del registro terminan en el directorio. Esta opción puede ser anulada por la noolddiropción.

Referencia : https://manpages.debian.org/jessie/logrotate/logrotate.8.en.html

Eugen Bogdanovich
fuente