Назад | Перейти на главную страницу

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 журналов?

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

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