logrotate сжимает только последние n журналов

logrotate сжимает только последние n журналов

Мне нужно сделать ежедневную ротацию /var/log/messages для хранения в течение 60 дней, при этом последние 30 журналов должны быть сжаты с помощью bzip2.

Вот моя конфигурация logrotate:

/var/log/messages {                                                                                              daily
    rotate 60
    postrotate
    /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true    
    endscript 
}

но в результате сохраняются последние 60 ежедневных не сжатых журналов. Если добавить compress, то все 60 журналов будут сжаты.

Так есть ли способ сжать ТОЛЬКО последние 30 журналов?

решение1

Я думаю, что для logrotate нет такой опции, чтобы делать это напрямую. Единственная релевантная опция — это delaycompressзадержка сжатия на один цикл ротации журнала (в вашем случае на один день). Возможно, вы можете воспользоваться этой compresscmdопцией, написав скрипт оболочки, чтобы проверить, сколько у вас файлов журнала, и сжать/распаковать нужные вам файлы.

Другая возможность — запланировать ежедневное cronзадание по запуску скрипта для проверки ваших файлов журналов и сжатия/распаковки нужных вам данных.

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