еженедельное архивирование logrotate очищает ежедневные файлы

еженедельное архивирование logrotate очищает ежедневные файлы

Моя цель — поддерживать файлы журналов за 4 дня, чтобы на пятый день был создан zip-файл со всеми четырьмя файлами журналов. Четыре файла журналов, созданных до сих пор, удаляются.

Это мое logrotate.conf:

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

У меня есть crontabзапись:

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

Я вижу zip-файл за пятый день вместе с пустыми файлами за предыдущие четыре дня и еще четыре zip-файла пустых файлов.

rotate 5Разве это не compressозначает, что необходимо удалить предыдущие 4 файла после сжатия их в один архив и zip?

решение1

rotateи compressнезависимы. compressсжимает каждый ротированный файл журнала, rotateустанавливает, сколько ротированных файлов журнала хранить. Их совместное использование не означает, что ротированные файлы журнала объединяются и сжимаются.

Что вы можете сделать, так это использовать post-rotateтакой скрипт:

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

(Использование spongefrom moreutilsдля перезаписи последнего файла журнала)

Однако extension .gzэто бесполезно, если ваши файлы журналов на самом деле не имеют .gzрасширения.

Связанный контент