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

Заставить logrotate удалить старые журналы после уменьшения значения поворота

Я пытаюсь уменьшить количество файлов журнала, хранящихся для Apache, уменьшив «поворот 52» в /etc/logrotate.d/apache2 до «повернуть 8». При еженедельной ротации журналы должны храниться за 2 месяца вместо полного года.

Я развернул новую конфигурацию через Puppet на наших десятках серверов и заметил, что она работает не так, как я ожидал. Я ожидал, что он удалит ошибку Apache и получит доступ к журналам журналов старше 8 недель, т.е. 9-52. Вместо этого он сохранил все старые журналы и просто не создает никаких новый те, которые превышают этот 8-недельный лимит! Поворот 9 сейчас отсутствует, но 10-52 все еще существуют.

Поиск в архиве показал мне, что это известное поведение, например Logrotate не удаляет старые журналы

Как легко избавиться от старых журналов? Я хочу избежать их ручного удаления на каждом сервере. У меня еще нет развернутого программного обеспечения для оркестровки, так что Puppet придется делать.

Мой файл /etc/logrotate.d/apache2 гласит:

/var/log/apache2/*.log {
    weekly
    missingok
    rotate 8
    compress
    delaycompress
    notifempty
    create 644 root adm
    sharedscripts
    postrotate
        /etc/init.d/apache2 reload > /dev/null
    endscript
    prerotate
        if [ -d /etc/logrotate.d/httpd-prerotate ]; then \
            run-parts /etc/logrotate.d/httpd-prerotate; \
        fi; \
    endscript
}

Вы можете добавить скрипт postrotate в свой текущий блок, чтобы удалить файлы старше n дней со следующим:

find /var/log/apache2 -maxdepth 1 -mtime +<n> -name "*.log.*.gz" -delete &>/dev/null

Дождитесь следующего поворота, затем удалите его и позвольте logrotate снова выполнить свою обычную работу.