Logrotate nie usuwa starych dzienników

14

z jakiegoś powodu stare pliki dziennika nie są usuwane. Przykład z apache

Co mówi plik 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
}

(Skadrowana) zawartość folderu dziennika:

# 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
[...]

W rzeczywistości jest ich wiele:

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

Polecenie logrotate z opcją --verbose daje mi to:

# /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
[...]

Co tu jest nie tak? Dzienniki są obrócone, ale nie usunięte? czego mi brakuje?

SamK
źródło

Odpowiedzi:

17

Twoja konfiguracja mówi: obróć 2

oznacza to, że pliki dziennika są obracane 2 razy przed usunięciem, więc logrotate dba tylko o 2 pliki.

Domyślam się, że konfiguracja została w pewnym momencie zmieniona, ponieważ wcześniej przechowywano więcej plików dziennika, być może było to coś takiego jak obrót 28. Te starsze pliki należy usunąć ręcznie.

johnshen64
źródło
Nie mogę udowodnić odpowiedzi, więc chyba tak jest. Jednak nie rozumiem, dlaczego access.log.3.gzwciąż jest obecny.
SamK
2
Ponieważ rotate 2 obsługuje tylko 2 pliki, tj. .1.gz i .2.gz, i ignoruje inne pliki.
johnshen64
1
Zmieniłem rotate 365 na rotate 90, a access.log.90.gz to jak dotąd ostatnia zmieniona. Access.log.91.gz został usunięty (ponieważ logrotate utrzymuje tylko 90), ale nie> 91. Więc johnshen64 ma rację, musisz usunąć wszystko> 2.
Yvan
Oto wskazówka, jak sobie z tym poradzić automatycznie, np. Poprzez zarządzanie konfiguracją na wielu serwerach: serverfault.com/a/636883/9082
Martijn Heemels
-3

Dzienniki z sufiksem .gz nie są uwzględniane, ponieważ określono: /var/log/apache2/*.log

Pozostały więc 2 .log i wszystkie pliki .gz.

Aby to zmienić, umieść tam

/ var / log / apache2 / ** log * lub jakieś wyrażenie regularne.

Neg88
źródło
Przepraszam, tylko jedna gwiazdka przed logowaniem
Neg88
2
W przypadku problemu z gwiazdką możesz edytować swój post. Mówiąc bardziej ogólnie, dlaczego uważasz, że zaakceptowana odpowiedź jest błędna? logrotate chce bazowych plików nazw iw razie potrzeby zajmuje się dodatkami .gz.
Ustawa
Ta odpowiedź jest w rzeczywistości szkodliwa, ponieważ istnieje ryzyko, że pliki będą obracane w kółko, przynajmniej w przypadku niektórych wersji Logrotate. Najpierw skompresuje pliki, a następnie dopasuje skompresowane pliki i będzie je dalej obracać.
Richlv