Mam następującą nową konfigurację Logrotate:
/var/log/nexus/nexus.log {
rotate 7
missingok
compress
delaycompress
copytruncate
daily
}
Po uruchomieniu logrotate -d nexus
otrzymuję następujące informacje:
reading config file nexus
reading config info for /var/log/nexus/nexus.log
Handling 1 logs
rotating pattern: /var/log/nexus/nexus.log after 1 days (7 rotations)
empty log files are rotated, old logs are removed
considering log /var/log/nexus/nexus.log
log does not need rotating
Mój folder / var / log / nexus / zawiera następujące elementy:
nexus.log
oldlogs.tar.gz
Dlaczego LogRotate nie obraca pliku nexus.log? Spodziewałem się, że plik nexus.log zostałby obcięty i utworzony zostałby nowy plik, coś w rodzaju nexus.log-201106241000.
Odpowiedzi:
Najprawdopodobniej plik dziennika ma mniej niż jeden dzień i / lub został obrócony w ciągu ostatniego dnia, a logrotate zapamiętuje historię.
Jeśli dodasz
-f
, wymusi obrót, jeśli naprawdę chcesz (choć nie w 100% pewny, jak to wchodzi w interakcję-d
).Możesz spojrzeć na historię, lokalizacja zależy od twojej dystrybucji, ale może być
/var/lib/logrotate/status
. Ten plik pokazuje, kiedy dzienniki były ostatnio obracane.źródło
-d
+-f
sprawia, że raport logrotate „wymaga rotacji” dla wszystkich plików, nawet tych, które się nie zgadzająlogrotate
że trzeba obrócić dziennik po ponownym uruchomieniu.Przy pierwszym uruchomieniu programu logrotate z nową konfiguracją dziennika, nie wie on, kiedy nastąpił ostatni obrót dziennika, więc po prostu zapisuje wiersz statusu,
/var/lib/logrotate/status
aby efekt został uruchomiony dzisiaj.Gdy następnie uruchamia się następnego dnia, widzi, że dziennik ma jeden dzień i obraca go zgodnie z oczekiwaniami. Jeśli nie chcesz czekać, edytuj plik statusu logrotate i wybierz datę statusu dziennika z poprzedniego dnia.
Gdy uruchomisz logrotate ręcznie, będzie działać zgodnie z oczekiwaniami
źródło
Czasami nawet jeśli uruchomisz logrotate ręcznie, nie zadziała to, jeśli zrobisz to tego samego dnia i nie ma
dateext
wartości domyślnej (np-%Y%m%d
.). Nawet jeśli zmodyfikujesz plik statusu logrotate lub użyjesz dyrektywy rozmiaru (npsize 200M
.). Przynajmniej w CentOS 6 logrotate nie obróci pliku dziennika, ponieważ już istnieje.Aby rozwiązać ten problem, należy użyć
dateformat
zamiastdateext
o wartości takich jak:%Y%m%d%s
.Zobacz
man logrotate
więcej informacji.źródło
Uważaj na to, uruchamiając
zdarzenie, chociaż tylko symulowane, zostanie zarejestrowane,
/var/lib/logrotate.status
a kolejne przebiegi logrotate odpowiedzą na wspomnianeźródło
/var/lib/logrotate.status
) zaobserwowano podczas debugowania konfiguracji Logrotate 3.10 na Alpine Linux 3.5 w kontenerze dokera. Ale w definicji pytania nie ma flagi Ubuntu, prawda?/var/lib/logrotate/logrotate.status