Моя цель — поддерживать файлы журналов за 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
(Использование sponge
from moreutils
для перезаписи последнего файла журнала)
Однако extension .gz
это бесполезно, если ваши файлы журналов на самом деле не имеют .gz
расширения.