logrotować codziennie i rozmiar?

40

Jeśli konfiguracja logrotate jest określona parametrami „rozmiar” i „dzienny”, który z nich ma pierwszeństwo? Gdzie to jest udokumentowane? Chciałbym, aby te obroty występowały jako operacja logiczna OR, tzn. Jeśli dzienniki mają jeden dzień, obracają się, LUB jeśli są większe niż określony rozmiar, będą również obracane. Jednak logrotate używa obecnie tylko dyrektywy „rozmiar” i wydaje się ignorować dyrektywę „codzienną”. Logrotate jest skonfigurowany do uruchamiania co godzinę. System operacyjny to Linux, Red Hat i Debian.

Ponadto określam „codziennie”, a następnie „rozmiar” od początku pliku. Nie jestem pewien, czy kolejność ma znaczenie, ale w każdym razie trzeba najpierw zająć miejsce w pliku konfiguracyjnym ...

Dzięki!

spodnie kota
źródło
2
Zobacz także serverfault.com/questions/474941/…
belacqua,
> definicje lokalne zastępują definicje globalne, a późniejsze> zastępują wcześniejsze z strony podręcznika programu logrotate 3.8.7
John Bob Joe

Odpowiedzi:

62

Jeśli stosowana jest dyrektywa rozmiaru , logrotate zignoruje dyrektywy dzienne , tygodniowe , miesięczne i roczne . Nie jest to jasne w dokumentacji podczas wykonywania man logrotatepolecenia. Można to jednak potwierdzić w praktyce i jest wspomniane w niektórych dowolnych postach na blogu, takich jak ten .

Istnieje dyrektywa o nazwie minsize, która według strony podręcznika logrotate jest jedyną dyrektywą rozmiaru, która może być używana w połączeniu z tymi dotyczącymi czasu. Jednak nadal nie jest to, czego chcesz. Używanie minsize z dziennikiem zasadniczo mówi: obracaj dzienniki codziennie, ale tylko wtedy, gdy mają co najmniej # MB wielkości .

Do tej pory nie znalazłem sposobu, aby logrotate spełniał wymagany warunek: obracaj codziennie, chyba że rozmiar przekracza # MB, w takim przypadku obracaj natychmiast . Nie sądzę, że jest to obsługiwane przy użyciu tylko dyrektyw logrotate. Możliwe jest wykonanie sprytnego skryptu za pomocą dyrektyw haka skryptu, takich jak prerotate , postrotate , firstaction i lastaction .

Aktualizacja :

Począwszy od Logrotate 3.8.1, maxsizeoraz timeperiodsą obsługiwane wspólnie, co byłoby rozwiązaniem idealnym. Zobacz odpowiedź na ten post: Jak obrócić dziennik na podstawie przedziału, chyba że dziennik przekroczy określony rozmiar?

gregtczap
źródło
4
Najlepszą opcją byłoby prawdopodobnie użycie dwóch osobnych poleceń cron, uruchamianie, aby uruchamiać je codziennie z domyślnym conf, i jedna co x minut, która wykonuje konfigurację tylko z plikami, których obawiasz się o przepełnienie przy użyciu dyrektywy rozmiaru, a nie codziennie.
SilverbackNet
8
Od logrotate 3.81 maxsizei timeperiodsą obsługiwane. Na serverfault.com/questions/474941/…
belacqua,
1
@belacqua Używam 3.8.7 i timeperiod nie jest w człowieku.
JorgeeFG
Właściwa wersja to tak naprawdę 3.8.1, a nie 3.81.
Tom Miller
2

Pierwsza odpowiedź @egg jest, zgodnie z moimi doświadczeniami z logrotate, nieprawda!

Jeśli dzienne, miesięczne ...najważniejsze, a po tej dyrektywie rozmiaru , dzienne, miesięczne ... zostaną zignorowane, a dyrektywa rozmiaru będzie miała zastosowanie do pliku dziennika.

Podobnie, kiedy po raz pierwszy użyję dyrektywy rozmiarów, a następnie dyrektyw dziennych, tygodniowych, miesięcznych i rocznych, dyrektywa rozmiarów będzie ignorowana.

Stwardnienie rozsiane
źródło
1

Jeśli dodasz opcję Codziennie, będzie się obracać każdego dnia, nawet jeśli warunek Rozmiar zostanie spełniony. Jeśli dodasz również warunek rozmiaru, możesz uzyskać dwie rotacje w ciągu jednego dnia, w zależności od szczegółowości rejestrowania.

Jeśli Daily zajmie pierwsze miejsce w skrypcie, rozmiar może się nie uruchomić.

Paul Hickox
źródło
użyj opcji pełnej, aby zobaczyć, które reguły są używane. Z moich testów wynika, że ​​używana jest tylko ostatnia reguła, ponieważ bardziej szczegółowe reguły mogą zastąpić bardziej ogólne reguły.
Bram
Więcej obrotów jest OK, ponieważ takie byłoby oczekiwane zachowanie. (boolean OR) Jednak moim problemem jest to, że te rotacje nie występują. Wydaje się, że jest to błąd (prawdopodobnie funkcja) rotacji logów, ponieważ nie widzę nigdzie ważnej lub udokumentowanej kolejności dyrektyw.
kocie spodnie
czy możesz podać przykład swojego pliku logrotate.conf i plików, które próbujesz wycelować? Codziennie nie ma innego stanu niż upływ czasu. Rozmiar jest warunkowy.
Paul Hickox
/tmp/output.log {dzienny rozmiar 1k obróć 5}
spodnie kota
1
Ten plik dostaje obrócone, gdy rozmiar jest większy niż 1k, ale to nie obraca się codziennie zgodnie z oczekiwaniami i pożądane.
kocie spodnie
1

W rzeczywistości moja strona podręcznika w Red Hat wydaje się całkiem jasna na temat różnic między rozmiarem a minsize:

rozmiar min

          Log  files  are rotated when they grow bigger then size bytes,
          but  not  before  the  additionally  specified  time  interval
          (daily,  weekly, monthly, or yearly).  The related size option
          is similar except that it is mutually exclusive with the  time
          interval  options, and it causes log files to be rotated with-
          out regard for the last rotation time.  When minsize is  used,
          both the size and timestamp of a log file are considered.
Geoffrey M.
źródło