 Autor: [Adam Nadolny](/autorzy/adam-nadolny) Ekspert DevOps i infrastruktury · Zweryfikowano Kwiecień 2026

1.  [Strona główna](/) ›
2.  [Baza wiedzy](/baza-wiedzy/) ›
3.  Logrotate — rotacja logów na VPS

# Logrotate — konfiguracja rotacji logów na VPS i hostingu Linux

Opublikowano: 9 kwietnia 2026 · Kategoria: VPS

Plik logu nginx rosnący przez miesiąc może osiągnąć kilkaset megabajtów. Na małym VPS z 20 GB dysku to poważny problem. Logrotate to standardowe narzędzie Linux do automatycznego zarządzania logami — rotuje je codziennie lub tygodniowo, kompresuje stare pliki i usuwa najstarsze. Większość dystrybucji Linux ma logrotate zainstalowany domyślnie.

## Jak działa logrotate

Logrotate uruchamiany jest przez cron (domyślnie raz dziennie, zwykle o 6:25). Sprawdza wszystkie konfiguracje w `/etc/logrotate.d/` i dla każdej decyduje, czy nadszedł czas na rotację. Rotacja = zmiana nazwy aktualnego pliku logu (np. `access.log` → `access.log.1`), opcjonalna kompresja do `access.log.1.gz`, wysłanie sygnału do procesu żeby otworzył nowy plik i usunięcie logów starszych niż limit retencji.

## Konfiguracja nginx

Domyślna konfiguracja nginx w `/etc/logrotate.d/nginx`:

/var/log/nginx/\*.log {
    daily
    missingok
    rotate 52
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    prerotate
        if \[ -d /etc/logrotate.d/httpd-prerotate \]; then
            run-parts /etc/logrotate.d/httpd-prerotate
        fi
    endscript
    postrotate
        # Sygnał do nginx żeby otworzył nowy plik logu
        invoke-rc.d nginx rotate >/dev/null 2>&1
    endscript
}

## Konfiguracja MySQL / MariaDB

/var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log /var/log/mysql/error.log {
    daily
    rotate 7
    missingok
    create 640 mysql adm
    compress
    delaycompress
    sharedscripts
    postrotate
        test -x /usr/bin/mysqladmin || exit 0
        # Flush logs po rotacji
        if \[ -f /var/run/mysqld/mysqld.pid \] && kill -0 $(cat /var/run/mysqld/mysqld.pid) 2>/dev/null; then
            mysqladmin --defaults-file=/etc/mysql/debian.cnf flush-logs
        fi
    endscript
}

## Konfiguracja PHP-FPM

/var/log/php8.2-fpm.log {
    rotate 12
    weekly
    missingok
    notifempty
    compress
    delaycompress
    postrotate
        /usr/lib/php/php8.2-fpm-reopenlogs
    endscript
}

## Konfiguracja własnej aplikacji

Dla własnej aplikacji Python/Node.js utwórz `/etc/logrotate.d/myapp`:

/var/log/myapp/\*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    create 0644 myappuser myappuser
    sharedscripts
    postrotate
        # Wyślij sygnał USR1 do procesu żeby otworzył nowy plik
        \[ -f /run/myapp.pid \] && kill -USR1 $(cat /run/myapp.pid) || true
    endscript
}

## Kluczowe opcje konfiguracji

Opcja

Znaczenie

Przykład

`daily / weekly / monthly`

Częstotliwość rotacji

`daily`

`rotate N`

Liczba kopii do przechowania

`rotate 14` (2 tygodnie)

`compress`

Kompresja gzip starych logów

Oszczędność ~70% miejsca

`delaycompress`

Kompresja od drugiej kopii

Zapobiega problemom z otwartymi plikami

`missingok`

Nie błęduj gdy brak pliku

Przydatne gdy app nie startuje

`notifempty`

Nie rotuj pustych plików

Oszczędza miejsce

`create MODE USER GROUP`

Uprawnienia nowego pliku logu

`create 0644 nginx adm`

`size N`

Rotuj gdy rozmiar przekroczy N

`size 100M`

`maxsize N`

Rotuj gdy rozmiar LUB czas

`maxsize 50M` + `weekly`

## Testowanie i troubleshooting

\# Dry-run — pokaż co zostałoby zrotowane (bez zmian)
sudo logrotate -d /etc/logrotate.conf

# Dry-run dla konkretnego pliku konfiguracyjnego
sudo logrotate -d /etc/logrotate.d/nginx

# Wymuś rotację natychmiastowo (ignoruje ograniczenia czasu)
sudo logrotate -f /etc/logrotate.d/nginx

# Status ostatnich rotacji
cat /var/lib/logrotate/status | head -20

# Sprawdź logi cron (kiedy ostatnio uruchamiał się logrotate)
grep logrotate /var/log/syslog | tail -5

# Diagnostyka: sprawdź uprawnienia do pliku logu
ls -la /var/log/nginx/

## Ręczne sprawdzenie rozmiaru logów

\# Rozmiar katalogu /var/log
sudo du -sh /var/log/\*

# 10 największych plików logów
sudo find /var/log -type f -exec du -h {} + | sort -rh | head -10

# Wolne miejsce na dysku
df -h /

## Najczęstsze pytania

Co to jest logrotate i po co go używać? +

Logrotate to narzędzie dla systemów Linux do automatycznej rotacji, kompresji i usuwania plików logów. Bez logrotate logi systemowe (nginx, Apache, MySQL, PHP-FPM) rosną bez ograniczeń i mogą zapełnić dysk VPS. Logrotate dzieli logi na segmenty (daily/weekly), kompresuje stare pliki i usuwa najstarsze, utrzymując dysk w porządku.

Jak sprawdzić czy logrotate działa? +

sudo logrotate -d /etc/logrotate.conf — dry-run, pokazuje co zostałoby zrotowane bez rzeczywistych zmian. sudo logrotate -f /etc/logrotate.conf — wymuś rotację natychmiastowo. Status ostatniej rotacji: cat /var/lib/logrotate/status. Logi logrotate: /var/log/syslog lub journalctl -u logrotate.

Jak skonfigurować logrotate dla własnej aplikacji? +

Utwórz plik /etc/logrotate.d/myapp z zawartością: /var/log/myapp/\*.log { daily compress delaycompress missingok rotate 14 notifempty sharedscripts postrotate kill -USR1 $(cat /run/myapp.pid) endscript }. Sygnał USR1 mówi procesowi żeby otworzył nowy plik logu po rotacji.

Dlaczego logi nginx/Apache nie rotują się poprawnie? +

Najczęstszy błąd: brak sygnału do procesu po rotacji. Nginx po rotacji nadal zapisuje do starego pliku dopóki nie dostanie sygnału USR1 (nginx -s reopen). Dodaj w sekcji postrotate: \[ -f /run/nginx.pid \] && kill -USR1 $(cat /run/nginx.pid). Dla Apache: apache2ctl graceful lub service apache2 reload.

## Sprawdź oferty pasujące do tego scenariusza

Poniżej masz szybkie przejścia do ofert i stron z kodami rabatowymi tam, gdzie są dostępne.

Contabo

VPS z dużym dyskiem NVMe — logi nie zapełnią Ci serwera

Duży dysk NVMe

[Aktywuj rabat →](/out/contabo)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/contabo)

Mikr.us

Budżetowy VPS — logrotate obowiązkowy przy ograniczonej przestrzeni

Budżetowy VPS

[Aktywuj rabat →](/out/mikrus)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/mikrus)

ProSerwer.pl

Polski VPS z pełnym dostępem root i supportem

Polski VPS

[Aktywuj rabat →](/out/proserwer-pl)

#Reklama · link partnerski

[Zobacz kod rabatowy →](/kody-rabatowe/proserwer)

## Powiązane strony

-   [Logi serwera Apache i Nginx — analiza](/baza-wiedzy/logi-serwera-apache-nginx)
-   [rsync — kopia zapasowa VPS krok po kroku](/baza-wiedzy/rsync-kopia-zapasowa-vps)
-   [UFW Firewall — konfiguracja na VPS](/baza-wiedzy/ufw-firewall-konfiguracja-vps)
-   [MySQL na hostingu — konfiguracja i optymalizacja](/baza-wiedzy/mysql-baza-danych-hosting)
-   [Wszystkie artykuły](/baza-wiedzy/)