Sprytne Okazje — promocje, kody rabatowe i wyprzedaże

Generator konfiguracji logrotate

Plik do /etc/logrotate.d z rotacją według czasu i rozmiaru, kompresją, create lub copytruncate i poleceniem po rotacji.

Bezpieczne (SSL)
Przetwarzanie Lokalne
100% Darmowe
Instrukcja
  • 1
    Wprowadź dane
    Wpisz treść, wklej tekst lub załaduj plik z dysku.
  • 2
    Kliknij przycisk
    Narzędzie natychmiast przetworzy Twoje dane w przeglądarce.
  • 3
    Pobierz wynik
    Skopiuj gotowy tekst lub zapisz plik na urządzeniu.
function runTool() {
  return "Wynik gotowy w 0.1s";
}
Plik w /var/log/, np. /var/log/nginx/*.log
Więcej opcji

/etc/logrotate.d/myapp

/var/log/myapp/*.log { daily rotate 14 compress delaycompress missingok notifempty create 0640 www-data adm postrotate systemctl reload myapp endscript }
198 znaków · 19 słów · 13 linii

Linii w pliku

12

Rotacja

Codziennie

daily

Zachowane archiwa

14

Zakres historii

ok. 14 dni

plus bieżący plik

Kompresja

Włączona

gzip; najnowsze archiwum bez kompresji

  • Uwaga: Ścieżka z gwiazdką obejmuje kilka plików, a postrotate wykona się dla każdego z nich osobno. Zaznacz „Jedno uruchomienie skryptu (sharedscripts)”, jeśli ma wystarczyć jedno.
  • Uwaga: Użytkownik i grupa z dyrektywy create muszą istnieć w systemie, inaczej logrotate zgłosi błąd.

Test bez zmian (dry-run)

sudo logrotate -d /etc/logrotate.d/myapp

Ściąga: co znaczą dyrektywy

Dyrektywy użyte w Twojej konfiguracji
DyrektywaCo robi
daily Rotacja raz dziennie.
rotate 14 Ile ostatnich archiwów zachować; starsze są usuwane.
compress Kompresuje zarchiwizowane logi (domyślnie gzip).
delaycompress Odkłada kompresję do następnej rotacji; najnowsze archiwum zostaje nieskompresowane.
missingok Brak pliku logu nie jest błędem.
notifempty Pusty log nie jest rotowany.
create 0640 www-data adm Po rotacji tworzy nowy, pusty plik z podanymi uprawnieniami, właścicielem i grupą.
postrotate … endscript Polecenie wykonywane po rotacji (do linii endscript), np. przeładowanie usługi.

Gdzie zapisać i jak sprawdzić

Zapisz konfigurację jako osobny plik w /etc/logrotate.d/ (nazwa jak usługa, np. myapp). Polecenie logrotate -d działa w trybie testowym: pokazuje, co by się stało, niczego nie zmieniając. Opcja -f wymusza rotację od razu.

create czy copytruncate

Zwykle logrotate przenosi stary plik i tworzy nowy (create), więc program musi ponownie otworzyć log, stąd postrotate z reload. Gdy aplikacja tego nie potrafi, użyj copytruncate: kopiuje log i zeruje oryginał, ale ułamek sekundy wpisów może zginąć.

Gwiazdka w ścieżce i postrotate

Gdy ścieżka obejmuje kilka plików, postrotate wykona się dla każdego osobno. Dyrektywa sharedscripts uruchamia skrypt raz, po rotacji wszystkich pasujących plików. Dla przeładowania usługi zwykle właśnie tego chcesz.

Jak policzyć okres przechowywania

Okres to w przybliżeniu rotate razy odstęp rotacji: daily i 14 daje ok. 14 dni, weekly i 8 daje ok. 8 tygodni (56 dni), monthly i 6 daje ok. 6 miesięcy. Z maxsize rotacja zachodzi też po przekroczeniu rozmiaru, więc okres bywa krótszy.

Oceń to narzędzie:

Powiązane narzędzia

Inne narzędzia, które mogą Ci się przydać

Konfiguracja logrotate z formularza

Logi rosną bez końca i mogą zapełnić dysk. logrotate dzieli je na archiwa, kompresuje i usuwa najstarsze – automatycznie i bez nadzoru. Konfiguracja logrotate to blok w osobnym pliku w /etc/logrotate.d/: ścieżka logów, a w nawiasach klamrowych dyrektywy. Generator składa taki blok z pól formularza, proponuje nazwę pliku i podaje gotowe polecenie testowe sudo logrotate -d.

Szablony Nginx, Apache i Aplikacja ustawiają ścieżkę oraz polecenie po rotacji (np. systemctl reload apache2), a szablon Tygodniowo zmienia częstotliwość na weekly z rotate 8. Ścieżka musi leżeć w /var/log/ i kończyć się na .log, liczba archiwów to 1–365, a polecenie postrotate to jedna linia. Pod wynikiem widać liczbę linii, przybliżony zakres historii, stan kompresji i ostrzeżenia, np. o gwiazdce w ścieżce bez sharedscripts.

Najważniejsze dyrektywy

DyrektywaZnaczenie
daily / weekly / monthlyczęstotliwość rotacji
rotate Nile archiwów zachować; starsze są usuwane
maxsize 100Mrotacja także po przekroczeniu rozmiaru, przed upływem okresu (jednostki k, M, G)
compresskompresuj archiwa (domyślnie gzip)
delaycompresskompresuj dopiero kolejny plik; najnowsze archiwum zostaje bez kompresji
dateextdata w nazwie archiwum zamiast numeru
missingoknie zgłaszaj braku pliku
notifemptynie rotuj pustego pliku
create 0640 www-data admpo rotacji utwórz pusty plik z podanymi uprawnieniami, właścicielem i grupą
copytruncateskopiuj log i wyzeruj oryginał zamiast go przenosić
sharedscriptsuruchom postrotate raz dla wszystkich pasujących plików
postrotate … endscriptpolecenie po rotacji

Przykład

Wynik szablonu Nginx z domyślnymi opcjami i zaznaczonym sharedscripts:

/var/log/nginx/*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        systemctl reload nginx
    endscript
}

Instalacja

Zapisz plik w /etc/logrotate.d/ pod nazwą, którą podpowiada generator (pierwszy katalog ścieżki, tu nginx), i sprawdź go poleceniem sudo logrotate -d /etc/logrotate.d/nginx (tryb debug). Plik testowany osobno nie dziedziczy ustawień globalnych, więc pełny test to logrotate -d /etc/logrotate.conf. Opcja -f wymusza rotację od razu i pozwala sprawdzić, czy polecenie z postrotate działa.

Pakiety Nginx i Apache w Debianie i Ubuntu instalują własny plik w /etc/logrotate.d/. Zastąp go albo edytuj – dwa bloki dla tych samych plików kończą się błędem zduplikowanego wpisu.

Jak działa rotacja i co właściwie generuje narzędzie

logrotate nie jest usługą działającą w tle. To program uruchamiany cyklicznie – przez cron lub timer systemd – który czyta konfigurację, sprawdza stan plików i wykonuje rotację tylko wtedy, gdy minął zadany okres. Każdy blok zaczyna się od ścieżki lub wzorca, na przykład /var/log/nginx/*.log, a w nawiasach klamrowych znajdują się dyrektywy opisujące, co zrobić z pasującymi plikami.

Bez dateext mechanizm rotacji to zmiana nazw: plik bieżący staje się plikiem numer 1, plik numer 1 – numerem 2 i tak dalej, aż do granicy wyznaczonej przez rotate N. Wszystko, co przekroczy tę granicę, jest usuwane. Dyrektywa rotate 14 oznacza więc, że obok pliku bieżącego leży maksymalnie 14 archiwów, czyli historia obejmuje 14 okresów rotacji. Przy daily daje to 14 dni, przy weekly – 14 tygodni. Na jeden rotowany log przypada zatem 15 plików: bieżący plus 14 archiwów. Z dateext archiwa dostają datę w nazwie (np. access.log-20261021), a limit rotate działa tak samo.

Generator składa gotowy blok z wybranych elementów: częstotliwości, liczby archiwów, opcjonalnego maxsize, kompresji, daty w nazwie, obsługi braku i pustego pliku, sposobu odtworzenia logu (create z uprawnieniami albo copytruncate) oraz polecenia w sekcji postrotate … endscript. Gdy zaznaczysz copytruncate, dyrektywa create jest pomijana, a delaycompress pojawia się tylko razem z compress. Wynik wklejasz do pliku w /etc/logrotate.d/, bo logrotate dołącza zawartość tego katalogu automatycznie. Nic nie jest zapisywane w systemie – to zwykły tekst do skopiowania i samodzielnego wdrożenia.

Przykład krok po kroku dla logów serwera WWW

  1. Klikasz szablon Nginx: ścieżka zmienia się na /var/log/nginx/*.log, a polecenie po rotacji na systemctl reload nginx. Gwiazdka obejmuje jednocześnie access.log i error.log, więc oba pliki rotują się w tym samym bloku i w tym samym momencie.
  2. Zostawiasz częstotliwość daily – jedna rotacja na dobę, w chwili uruchomienia logrotate przez cron lub timer systemd.
  3. Zostawiasz rotate 14. Poza plikiem bieżącym pozostaje 14 archiwów, czyli 14 dni historii; łącznie na każdy log przypada maksymalnie 15 plików.
  4. compress i delaycompress są włączone domyślnie. Archiwum numer 1 pozostaje przez jeden cykl nieskompresowane, a kompresowane są dopiero pliki od numeru 2 w górę – dzięki temu aplikacja, która wciąż pisze do świeżo zrotowanego pliku, nie traci danych.
  5. missingok, notifempty i create 0640 www-data adm też są zaznaczone: brak pliku nie wywoła błędu, pusty log nie zostanie zrotowany, a nowy plik powstanie od razu z prawami 0640, właścicielem www-data i grupą adm.
  6. W sekcji „Więcej opcji” zaznaczasz sharedscripts. Bez tego generator ostrzeże, że przy gwiazdce w ścieżce reload nginx wykona się osobno dla każdego pasującego pliku.
  7. Kopiujesz wynik do /etc/logrotate.d/nginx i uruchamiasz sudo logrotate -d /etc/logrotate.d/nginx. Tryb debug wypisze planowane operacje, nie ruszając plików. Wynik: 14 dni historii, maksymalnie 15 plików na log i jeden reload po każdej rotacji.

Jak używać wygenerowanej konfiguracji

  • Zaczynaj od logrotate -d. Tryb debug pokazuje, które pliki pasują do wzorca i co zostałoby zrotowane, nie zmieniając niczego na dysku. To najszybszy sposób wyłapania literówki w ścieżce.
  • Liczbę archiwów dobieraj do częstotliwości, nie odwrotnie: daily z rotate 14 to 14 dni historii, weekly z rotate 8 to około 56 dni, monthly z rotate 12 to rok. Jeśli zależy ci na około miesiącu wstecz, przy weekly wystarczy rotate 4.
  • Każda usługa powinna mieć osobny plik w /etc/logrotate.d/: jeden dla nginx, inny dla własnej aplikacji. Łatwiej wtedy zmienić lub usunąć konfigurację, nie ryzykując cudzych logów.
  • Przy create z reloadem w postrotate nowy plik musi mieć właściciela i uprawnienia zgodne z tym, kto realnie do niego pisze. Inaczej usługa po rotacji nie zapisze już nic.
  • copytruncate wybieraj tylko dla programów, które nie umieją ponownie otworzyć logu. Między skopiowaniem a wyzerowaniem pliku część wpisów z ułamka sekundy może zginąć.

Czego generator nie uwzględnia

  • Tempa przyrostu logów. Narzędzie nie wie, ile danych przybywa w ciągu doby, więc nie dobierze liczby archiwów do wolnego miejsca. Bezpiecznikiem bywa maxsize, ale logrotate sprawdza rozmiar tylko wtedy, gdy jest uruchamiany – przy standardowym uruchomieniu raz na dobę maxsize nie zadziała częściej.
  • Istnienia kont. Generator sprawdza tylko format uprawnień (3 lub 4 cyfry ósemkowe) i nazw; create 0640 www-data adm zadziała wyłącznie wtedy, gdy taki użytkownik i grupa istnieją w systemie.
  • Uprawnień katalogu. Jeśli katalog z logami jest zapisywalny dla wszystkich albo dla grupy innej niż root, logrotate pominie go z komunikatem o niebezpiecznych uprawnieniach. Trzeba wtedy dopisać ręcznie dyrektywę su.
  • Logów spoza /var/log/ i rzadszych dyrektyw. Ścieżkę w innym katalogu, prerotate, olddir czy wieloliniowy skrypt dopisujesz ręcznie po skopiowaniu wyniku.
  • Kontekstu systemu: polityk SELinux lub AppArmor, kontenerów bez crona i pliku stanu logrotate, przez który rzeczywisty moment rotacji może odbiegać od deklarowanej częstotliwości.

Najczęstsze pytania

Po co delaycompress?

Pozwala aplikacji dokończyć pisanie do właśnie zrotowanego pliku przed kompresją, co zapobiega utracie danych. Działa tylko razem z compress.

Jak często logrotate działa?

Zwykle raz dziennie przez cron lub timer systemd. Częstotliwość w konfiguracji (daily, weekly, monthly) mówi, kiedy plik ma być zrotowany, ale nie zmienia harmonogramu samego programu.

Czy rotate 14 oznacza 14 dni historii?

Nie samo w sobie. rotate 14 to 14 archiwów obok pliku bieżącego. Przy daily daje to 14 dni, przy weekly 14 tygodni, przy monthly 14 miesięcy.

Czy można rotować logi według rozmiaru, a nie czasu?

Tak, w polu maxsize podajesz limit, np. 100M. Plik rotuje się po przekroczeniu rozmiaru albo po upływie okresu, zależnie od tego, co nastąpi pierwsze, ale tylko w chwili uruchomienia logrotate.

create czy copytruncate?

create przenosi stary plik i tworzy nowy, więc program musi ponownie otworzyć log, zwykle przez reload w postrotate. copytruncate nie wymaga reloadu, ale może zgubić wpisy z chwili kopiowania.

Czy po rotacji trzeba przeładować usługę?

Przy create tak, jeśli aplikacja trzyma otwarty deskryptor pliku. Przy ścieżce z gwiazdką dodaj sharedscripts, żeby systemctl reload nginx wykonał się raz, a nie dla każdego pliku.

Zainstaluj Webp.pl Miej narzędzia we własnej kieszeni!