El archivado semanal logrotate vacía los archivos diarios.

El archivado semanal logrotate vacía los archivos diarios.

Mi objetivo es mantener los archivos de registro de 4 días para que, al quinto día, se cree un archivo zip con los cuatro archivos de registro. Se eliminan los cuatro archivos de registro creados hasta el momento.

Este es mi logrotate.conf:

/home/ubuntu/logs/server.log {
    daily
    missingok
    rotate 5
    compress
    create
    dateext
    dateyesterday
    dateformat .%Y-%m-%d
    extension .gz
}

Tengo una crontabentrada como:

2 0 * * * /usr/sbin/logrotate /home/ubuntu/logrotate.conf --state /home/ubuntu/logrotate.state 

Veo un archivo zip para el quinto día junto con archivos vacíos de los cuatro días anteriores y cuatro archivos zip más de los archivos vacíos.

¿No se rotate 5supone compressque eso significa eliminar los 4 archivos anteriores después de comprimirlos en un solo archivo y comprimirlos?

Respuesta1

rotatey compressson independientes. compresscomprime cada archivo de registro rotado y rotateestablece cuántos archivos de registro rotados se conservarán. Usarlos juntos no significa que los archivos de registro rotados se combinen y compriman.

Lo que podrías hacer es usar un post-rotatescript como este:

zcat /home/ubuntu/logs/server.log.*.gz |
  gzip | sponge /home/ubuntu/logs/server.log.$(date -d "now - 5 days" +%Y-%m-%d).gz

(Usando spongefrom moreutilspara sobrescribir el último archivo de registro)

Dicho esto, extension .gzes inútil a menos que sus archivos de registro realmente tengan una .gzextensión.

información relacionada