o arquivamento semanal do logrotate esvazia os arquivos diários

o arquivamento semanal do logrotate esvazia os arquivos diários

Meu objetivo é manter arquivos de log de 4 dias para que, no quinto dia, seja criado um arquivo zip com todos os quatro arquivos de log. Os quatro arquivos de log criados até agora serão excluídos.

Este é meu logrotate.conf:

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

Eu tenho uma crontabentrada como:

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

Vejo um arquivo zip do quinto dia junto com arquivos vazios dos quatro dias anteriores e mais quatro arquivos zip dos arquivos vazios.

Não rotate 5deveria compresssignificar isso, remover os 4 arquivos anteriores depois de compactá-los em um arquivo e compactar?

Responder1

rotatee compresssão independentes. compresscompacta cada arquivo de log girado e rotatedefine quantos arquivos de log girados serão mantidos. Usá-los juntos não significa que os arquivos de log girados sejam combinados e compactados.

O que você poderia fazer é usar um post-rotatescript assim:

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 substituir o último arquivo de log)

Dito isto, extension .gzé inútil, a menos que seus arquivos de log tenham uma .gzextensão.

informação relacionada