Ce face logrotate
Jurnalele aplicațiilor cresc continuu. logrotate „rotește” un fișier de jurnal: îl redenumește (app.log devine app.log.1), creează un fișier nou gol, comprimă versiunile vechi și le șterge pe cele care depășesc numărul păstrat.
Configurația generală este în /etc/logrotate.conf, iar fiecare aplicație își pune regulile în /etc/logrotate.d/. Pe distribuțiile cu systemd, rularea zilnică se face prin logrotate.timer; pe sistemele mai vechi, prin /etc/cron.daily/logrotate.
Înainte să activezi o configurație nouă, testeaz-o cu logrotate -d (mod de depanare, nu modifică nimic). Cu -f forțezi o rotire imediată, utilă la verificare.
Opțiuni și argumente
| Opțiune / Parametru | Descriere |
|---|---|
daily / weekly / monthly |
Cât de des se rotește jurnalul. |
rotate N |
Câte versiuni vechi se păstrează; cele mai vechi se șterg. |
compress / delaycompress |
Comprimă versiunile vechi cu gzip; delaycompress lasă necomprimată cea mai recentă (.1). |
missingok / notifempty |
Nu da eroare dacă fișierul lipsește; nu roti un fișier gol. |
create MOD UTILIZATOR GRUP |
Creează fișierul nou cu permisiunile și proprietarul dați. |
copytruncate |
Copiază jurnalul și golește originalul, pentru aplicații care nu pot redeschide fișierul. |
postrotate ... endscript |
Comenzi rulate după rotire (de exemplu reîncărcarea serviciului). |
-d, -f, -v |
Depanare fără modificări, rotire forțată, afișare detaliată. |
Exemple
Exemplul 1: Reguli pentru jurnalele unei aplicații, testate cu -d
Scriem fișierul /etc/logrotate.d/magazin: rotire zilnică, 14 versiuni păstrate, comprimare, iar după rotire PHP-FPM este reîncărcat ca să redeschidă fișierele. Apoi -d arată ce ar face logrotate, fără să atingă fișierele.
sudo tee /etc/logrotate.d/magazin > /dev/null <<'EOF'
/var/log/magazin/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 www-data adm
sharedscripts
postrotate
systemctl reload php8.4-fpm > /dev/null 2>&1 || true
endscript
}
EOF
sudo logrotate -d /etc/logrotate.d/magazin
Ieșire în terminal
reading config file /etc/logrotate.d/magazin
Handling 1 logs
rotating pattern: /var/log/magazin/*.log after 1 days empty log files are not rotated, (14 rotations), old logs are removed
considering log /var/log/magazin/comenzi.log
log needs rotating
rotating log /var/log/magazin/comenzi.log, log->rotateCount is 14
Exemplul 2: Rotire forțată și rezultatul pe disc
După rotire, jurnalul curent este nou și gol, iar versiunea de ieri a devenit .1.
sudo logrotate -f /etc/logrotate.d/magazin
ls /var/log/magazin/
Ieșire în terminal
comenzi.log comenzi.log.1 comenzi.log.2.gz comenzi.log.3.gz
Greșeli frecvente
- Aplicația scrie în continuare în fișierul vechi (
.1) după rotire: ori reîncarci serviciul înpostrotate, ori foloseșticopytruncate. - Permisiuni greșite la
create: aplicația nu mai poate scrie în jurnalul nou și pierzi mesajele. - Configurație netestată: o eroare de sintaxă în
/etc/logrotate.d/poate opri rotirea; rulează mereu întâilogrotate -d.
Comenzi înrudite
journalctl: Interoghează și filtrează jurnalele centrale de sistem gestionate de serviciul systemd-journald.systemd timers (systemctl list-timers): Programează sarcini repetate cu unități .timer în systemd, o alternativă la cron cu jurnal și dependențe.gzip: Comprimă fișiere individuale folosind algoritmul Lempel-Ziv (LZ77) și adaugă extensia .gz.