¿Puedo usar logrotate para comprimir registros diarios (con fecha)?

8

Tengo registros en el siguiente formato: AAAAMMDD

Quiero comprimir los registros antiguos (más antiguos que el día actual) y tal vez luego moverlos a un directorio diferente.

¿Puedo hacer esto en logrotate o tengo que usar un script personalizado en cron?

Šimon Tóth
fuente

Respuestas:

4

Aquí hay un script rápido que hará lo que necesita:

#!/bin/bash
LOGDIR=/var/log/somedir
OLDLOGS=/var/log/keep-old-logs-here
PATH=/bin:$PATH
TODAY=$(date +'%Y%m%d')

[ -d $OLDLOGS ] || mkdir -p $OLDLOGS

cd $LOGDIR

for LOG in $(ls | egrep '^[[:digit:]]{8}$'); do
    [ $LOG -lt $TODAY ] && gzip $LOG && mv $LOG.gz 
done

Haga que el script sea ejecutable:

$ chmod +x /where/you/put/this/script

La entrada de crontab se verá así:

30 0 * * * /where/you/put/this/script

Solo ajuste LOGDIRy OLDLOGDIR. A las 12:30 a.m., moverá todos los registros en el formato AAAAMMDD para los días anteriores (y anteriores, si los hay).

poco pitón
fuente
44
Sí, pero en realidad no responde mi pregunta. Mi pregunta era si puedo usar logrotate para esto.
Šimon Tóth
@Let_Me_Be: pensé que estaba implícito en mi respuesta. No, logrotate no hará exactamente lo que quieres. Es decir, no solo puede hacer coincidir los archivos AAAAMMDD. De lo contrario puede acercarse al usar nodateext, olddir, compress, y dailyopciones.
propicio el
3

logrotate puede hacerlo con olddir si el nombre del archivo de registro es el mismo cada vez que se ejecuta y puede agregar fechas. Si el nombre del archivo de registro cambia, es decir, AAAAMMDD, logrotate no lo hará por usted.

# sample logrotate conf file
copytruncate
compress
dateformat %Y%m%d.
dateext
extension log
olddir ./logarchive

/logs/sys.log {
    rotate 7
    daily
}

Copias y gzips /logs/sys.log a /logs/logarchive/sys.20120101.log.gz, mantiene registros de una semana.

jason
fuente
1
Esta no es la respuesta. Los registros ya tienen sellos de fecha y están rotados de manera efectiva. Let_Me_Be solo quiere comprimirlos. Creo que @jmtd tiene razón.
Andrew Lorien
2

logrotateen sí mismo no hace esto. Recomiendo escribir un script complementario e invocarlo logrotateusando la postrotateopción en la configuración.

jmtd
fuente