Logrotate не удаляет старые журналы

14

по какой-то причине старые файлы журнала не удаляются. Пример с apache

Что говорит файл conf:

$ cat /etc/logrotate.d/apache2
/var/log/apache2/*.log {
    weekly
    missingok
    rotate 2
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
            /etc/init.d/apache2 reload > /dev/null
    endscript
}

(Обрезанное) содержимое папки журнала:

# ls /var/log/apache2/
access.log       error.log.26.gz                other_vhosts_access.log.20.gz  access-ssl.log.14.gz
access.log.1     error.log.27.gz                other_vhosts_access.log.21.gz  access-ssl.log.15.gz
access.log.2.gz  error.log.28.gz                other_vhosts_access.log.22.gz  access-ssl.log.16.gz
access.log.3.gz  error.log.2.gz                 other_vhosts_access.log.23.gz  access-ssl.log.17.gz
[...]

На самом деле их много:

# ls /var/log/apache2/ | wc -l
85

Команда logrotate с --verbose дает мне это:

# /usr/sbin/logrotate --verbose  /etc/logrotate.conf
[...]
reading config file apache2
reading config info for /var/log/apache2/*.log
[...]
rotating pattern: /var/log/apache2/*.log  weekly (2 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/apache2/access.log
  log does not need rotating
considering log /var/log/apache2/error.log
  log does not need rotating
considering log /var/log/apache2/other_vhosts_access.log
  log does not need rotating
considering log /var/log/apache2/pbpdhg-ssl.log
  log does not need rotating
not running postrotate script, since no logs were rotated
[...]

Что здесь не так? Логи вращаются, но не удаляются? Что мне не хватает?

ДУМК
источник

Ответы:

17

ваша конфигурация говорит: поверните 2

это означает, что файлы журналов вращаются 2 раза перед удалением, поэтому logrotate заботится только о 2 файлах.

Я предполагаю, что конфигурация была изменена в какой-то момент, потому что ранее было сохранено больше файлов журнала, возможно, это было что-то вроде поворота 28. Эти старые файлы вы должны удалить вручную.

johnshen64
источник
Я не могу доказать ответ, поэтому я думаю, что это правильно. Однако я не понимаю, почему access.log.3.gzвсе еще присутствует.
SamK
2
Потому что rotate 2 обрабатывает только 2 файла, т.е. .1.gz и .2.gz, и игнорирует другие файлы.
johnshen64
1
Я изменил вращение 365 на вращение 90, и access.log.90.gz - последнее изменение на данный момент. Access.log.91.gz был удален (поскольку logrotate сохраняет только 90), но не> 91. Так что johnshen64 прав, вы должны удалить что-нибудь> 2.
Иван
Вот совет о том, как решить эту проблему
Мартейн Химельс
-3

Журналы с суффиксом .gz не рассматриваются, потому что вы указали: /var/log/apache2/*.log

Таким образом, 2 .log и все .gz файлы остаются.

Чтобы изменить это положить там

/ var / log / apache2 / ** log * или некоторое регулярное выражение.

Neg88
источник
Извините, только одна звездочка перед бревном
Neg88
2
Для проблемы звездочки, вы можете редактировать свой пост. В целом, как вы думаете, почему принятый ответ неверен? logrotate запрашивает файлы базовых имен и при необходимости обрабатывает дополнения .gz.
Закон 29
Этот ответ на самом деле вреден, так как есть риск, что он может привести к тому, что файлы будут вращаться снова и снова, по крайней мере, с некоторыми версиями logrotate. Сначала он сжимает файлы, затем сопоставляет сжатые файлы и продолжает вращать их.
Richlv