Logrotate: „log nie wymaga obracania” dlaczego?


57

Mam następującą nową konfigurację Logrotate:

/var/log/nexus/nexus.log {
    rotate 7
    missingok
    compress
    delaycompress
    copytruncate
    daily
}

Po uruchomieniu logrotate -d nexusotrzymuję 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.


Pamiętaj również, że gdy używasz opcji -d, NIE OBRACA DZIENNIKÓW. Pokazuje, co MÓGŁBY to zrobić bez opcji, jak plan gry. Powodowało to poważne bóle głowy, kiedy myślałem, że widzę, jak się obracają, a potem wciąż tam były.
Maxwell Flanders

Odpowiedzi:


64

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.


4
W FreeBSD jest to
/var/run/logrotate.status

Sprawdź także możliwe użycie argumentu -s w wywołaniu lokalizacji pliku statusu
JGurtz

2
-d+ -fsprawia, że ​​raport logrotate „wymaga rotacji” dla wszystkich plików, nawet tych, które się nie zgadzają
Fluffy

Aby dodać do tego, wystarczy zmienić datę w pliku statusu, aby była starsza niż zasada rotacji, aby przekonać się, logrotateże trzeba obrócić dziennik po ponownym uruchomieniu.
Centimane

W CentOS zmodyfikowałem /var/lib/logrotate.status, aby uruchomić logrotate. Jak wskazuje EightBitTony, codzienne logrotate zapamięta historię. O ile plik nie znajduje się w historii z datą w przeszłości, program logrotate nie obróci pliku.
Mark

58

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/statusaby 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


5

Czasami nawet jeśli uruchomisz logrotate ręcznie, nie zadziała to, jeśli zrobisz to tego samego dnia i nie ma dateextwartości domyślnej (np -%Y%m%d.). Nawet jeśli zmodyfikujesz plik statusu logrotate lub użyjesz dyrektywy rozmiaru (np size 200M.). Przynajmniej w CentOS 6 logrotate nie obróci pliku dziennika, ponieważ już istnieje.

Aby rozwiązać ten problem, należy użyć dateformatzamiast dateexto wartości takich jak: %Y%m%d%s.

Zobacz man logrotatewięcej informacji.


1

Uważaj na to, uruchamiając

logrotate -vdf /etc/logrotate.conf

zdarzenie, chociaż tylko symulowane, zostanie zarejestrowane, /var/lib/logrotate.status a kolejne przebiegi logrotate odpowiedzą na wspomniane

log does not need rotating

1
Nie mogę tego odtworzyć na Ubuntu (16.04 i 17.04). Jeśli używany jest plik „/var/lib/logrotate.status”, należy użyć innej dystrybucji. Ubuntu loguje się do „/ var / lib / logrotate / status”.
Philipp Claßen,

2
@ Philipp Claßen: Masz rację (plik statusu umieszczony w /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?
helvete

1
Tak, w porządku. Chciałbym tylko wspomnieć o tym, ponieważ Ubuntu jest tak popularny. Zakładam, że wiele osób czyta to pytanie, ponieważ chcą naprawić swój serwer, który dzisiaj często działa z Ubuntu.
Philipp Claßen,

1
Tak, to prawda. W celu uzupełnienia mogę dodać, że lokalizacja pliku statusu w dystrybucji Centos 7 jest na/var/lib/logrotate/logrotate.status
helvete
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.