Jak obrócić dziennik na podstawie przedziału, chyba że dziennik przekroczy określony rozmiar?

20

Ze strony podręcznika użytkownika logrotate:

minsize size
Pliki dziennika są obracane, gdy stają się większe niż rozmiar bajtów, ale nie przed dodatkowo określonym przedziałem czasu (dziennym, tygodniowym, miesięcznym lub rocznym). Powiązana opcja rozmiaru jest podobna, z tą różnicą, że wyklucza się wzajemnie z opcjami przedziału czasu i powoduje obrót plików dziennika bez względu na czas ostatniego obrotu. Gdy używany jest parametr minsize, uwzględniany jest zarówno rozmiar, jak i znacznik czasu pliku dziennika.

rozmiar rozmiar
Pliki dziennika są obracane, gdy stają się większe niż rozmiar bajtów. Jeśli po rozmiarze następuje k, przyjmuje się, że rozmiar jest wyrażony w kilobajtach. Jeśli użyjesz M, rozmiar będzie wyrażony w megabajtach, a jeśli użyjesz G, rozmiar będzie wyrażony w gigabajtach. Tak więc rozmiar 100, rozmiar 100k, rozmiar 100M i rozmiar 100 Gare są wszystkie ważne.

Ustawiam rozmiar na 5M, a odstępy co tydzień, myśląc, że dzienniki będą obracane co tydzień, a dodatkowy obrót wystąpiłby, gdyby rozmiar dziennika przekroczył 5M. Ale dzieje się tak, że log nie obraca się, dopóki nie przekroczy 5M, co wydaje się być tym, co powinien zrobić minsize .

Czy źle interpretuję instrukcję? Jak sprawić, by dziennik obracał się co tydzień ORAZ, jeśli przekracza 5 mln?

EDYTOWAĆ:

Nie jestem pewien, czy następujące informacje są istotne, ale tylko w celu uzupełnienia:

Używam rsyslog do głównego logowania wiadomości, bezpiecznego, crona, mailloga, rozruchu. Oto data rotacji i rozmiar pliku przedostatnich dzienników, w których rozmiar i interwał są ustawiane zgodnie z powyższym opisem:

filename  rotation date  file size
messages  20130129       5.3MB
secure    20130113       5.1kB
cron      20130113       3.6kB
maillog   20130113       1.1kB

Jak widać, tylko wiadomości są obracane.

EDYCJA 2:

Powinienem sprawdzić man logrotate. W rzeczywistości zaktualizowali go o opcję maxsize . To powinno być to, czego szukam:

maxsize size
Pliki dziennika są obracane, gdy stają się większe niż rozmiar bajtów, nawet przed dodatkowo określonym przedziałem czasu (dziennym, tygodniowym, miesięcznym lub rocznym). Powiązana opcja rozmiaru jest podobna, z tą różnicą, że wyklucza się wzajemnie z opcjami przedziału czasu i powoduje obrót plików dziennika bez względu na czas ostatniego obrotu. Gdy używany jest parametr maxsize, uwzględniany jest zarówno rozmiar, jak i znacznik czasu pliku dziennika.

Przepełnienie pytania
źródło

Odpowiedzi:

24

Odpowiedzi na niektóre pytania tutaj: logrotować codziennie i rozmiar?

Zazwyczaj logrotatebędzie uruchamiany tylko raz dziennie, więc limity rozmiaru nie będą dokładnie przestrzegane. logrotateplik statusu (ewentualnie /var/lib/logrotate.status) przechowuje tylko daty (nie godziny), nie jest przeznaczony do częstszego używania, więc nie można częściej trywialnie obracać plików ( aktualizacja : wersja 3.85 dodaje obsługę godzinową i przechowuje pełną sygnaturę czasową w pliku stanu .)

Nie mówisz, którego syslogdużywasz, rsyslog i syslog-ng obsługują rotację opartą na zarządzaniu wielkością, więc powinieneś być w stanie zmusić je do obracania według rozmiaru i logrotateobracania co tydzień (chociaż może być wymagana pewna myśl nazewnictwo plików, aby mieć pewność, że jednoczesne obracanie pliku nie spowoduje przypadkowego usunięcia pliku).

Inną opcją jest użycie dzienników potokowych, podobnie jak Apache, w rzeczywistości Apache-2.4 rotatelogs obsługuje dokładnie tę funkcję (poprzednie wersje tylko niezależnie obsługiwały rozmiar lub czas). Nie mów, skąd pochodzą dzienniki, ale możesz zalogować się do potoku lub fifo i użyć rotatelogs, jeśli jest to obsługiwane.

W przypadku logrotate<= v3.8.0 trzy obsługiwane scenariusze to:

  1. rozmiar obracaj według rozmiaru, najwyżej raz dziennie, niezależnie od upływu czasu
  2. czasomierz obraca się bezwarunkowo według czasu, niezależnie od wielkości
  3. minsize & timeperiod, jeśli rozmiar pliku dziennika przekracza minsize, następnie obracaj według timeperiod. Typowym zastosowaniem jest „minsize 1”, co oznacza, że ​​dzienniki 0-bajtowe nie obracają się, co minimalizuje bałagan.

logrotate-3.8.1 dodaje:

  1. maxsize & timeperiod obracają się, gdy którykolwiek rozmiar przekracza maxsize lub po upływie timeperiod. logrotatew takim przypadku może być konieczne uruchamianie więcej niż domyślnie raz dziennie.

logrotate-3.8.5 dodaje:

  1. cogodzinna obsługa i przechowuje pełny znacznik czasu w pliku stanu. Powinieneś biegać logrotate(co najmniej) co godzinę.
pan. spuratic
źródło
Proszę zobaczyć moją aktualizację, dziękuję za link. Wydaje się, że wymagane są jakieś skrypty? minsize wydaje się mało przydatny, zastanawiam się, dlaczego mają go zamiast maxsize.
Przepełnienie pytania
1
Tak, opcja maksymalizacji jest już dostępna. Sprawa zamknięta :)
Przepełnienie pytania
zauważyłem to w dokumentach, zanim przeczytałem twoją aktualizację ... odpowiedź jest teraz rozszerzona. dzięki.
mr.spuratic
1
> Plik statusu logrotate (ewentualnie /var/lib/logrotate.status) przechowuje tylko daty (nie godziny). To oświadczenie może być nieaktualne. Właśnie sprawdziłem mój plik statusu logrotate i zawiera on znaczniki czasu z drugą rozdzielczością: „/var/log/kern.log” 2018-3-12-1: 8: 16
hyperair