logrotate архивирует, сжимает и удаляет старые логи по расписанию.

Конфиг для nginx уже есть в /etc/logrotate.d/nginx. Пример для своего приложения:

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

Ключевые директивы:

  • rotate 14 — хранить 14 файлов, потом удалять
  • compress / delaycompress — сжимать в gzip, но не текущий
  • missingok — не падать, если лог отсутствует
  • postrotate — перезагрузить сервис после ротации (иначе он пишет в старый fd)
# проверить конфиг без применения
logrotate -d /etc/logrotate.d/myapp

# принудительная ротация
logrotate -f /etc/logrotate.d/myapp

Состояние ротации хранится в /var/lib/logrotate/status — там видно, когда каждый файл ротировался последний раз.

#linux #nginx #sysadmin #logs