logrotate — standard Linux tool для управления log-файлами. Rotates (переименовывает), compresses, deletes old logs по расписанию. Установлен в большинстве distributions by default. Config в /etc/logrotate.d/. Запускается ежедневно через cron. Важно: postrotate hook для reload app после rotation (nginx, syslog).
Ниже: пошаговая инструкция, рабочие примеры, типичные ошибки, FAQ.
/var/log/myapp/*.logsystemctl reload nginx если нужен HUPlogrotate -d /etc/logrotate.d/myapp (debug mode, без изменений)logrotate -f /etc/logrotate.d/myapp| Сценарий | Конфиг |
|---|---|
| Standard nginx rotation | /var/log/nginx/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 640 nginx adm
sharedscripts
postrotate
systemctl reload nginx > /dev/null 2>&1 || true
endscript
} |
| Weekly с size limit | /var/log/myapp/*.log {
weekly
rotate 12
size 100M
compress
missingok
} |
| copytruncate (для apps без HUP handler) | /var/log/app.log {
daily
rotate 7
copytruncate
# Копирует файл и обрезает original на месте
} |
| Дата в имени rotated | /var/log/myapp/*.log {
daily
rotate 30
dateext
dateformat -%Y%m%d
compress
} |
| Тест без изменений | logrotate -d /etc/logrotate.d/myapp # debug, shows what would happen |
|| true — fail script blocks rotation/var/lib/logrotate/status обновляетсяjournald — built-in systemd, binary format, <code>journalctl</code>. logrotate — text files с compression. Для apps что пишут в файл — logrotate.
cron.daily — 1 раз в день. Для more frequent — hourly через /etc/logrotate.d/ и cron entry.
Same directory с суффиксом .1, .2, .gz etc. Example: access.log → access.log.1 → access.log.2.gz.
<code>logrotate -d</code> (dry-run) показывает что произойдёт. Status: <code>cat /var/lib/logrotate/status</code> — когда последний rotation.