Skip to content

Как настроить logrotate

Коротко:

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.

Пошаговая настройка

  1. Создайте /etc/logrotate.d/myapp
  2. Укажите путь к logs: /var/log/myapp/*.log
  3. Опции: daily / weekly / monthly (frequency)
  4. rotate N — количество старых копий хранить
  5. compress — gzip старые
  6. postrotate hook: systemctl reload nginx если нужен HUP
  7. Тест: logrotate -d /etc/logrotate.d/myapp (debug mode, без изменений)
  8. Ручной прогон: 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

Типичные ошибки

  • notifempty + пустой log — не rotated → через недели огромный пустой file
  • missingok опущен — logrotate errors при отсутствии log file
  • postrotate без || true — fail script blocks rotation
  • copytruncate теряет events, отправленные между copy и truncate
  • Rotation не работает — проверьте что /var/lib/logrotate/status обновляется

Больше по теме

Часто задаваемые вопросы

logrotate vs journald?

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.

Куда идут rotated logs?

Same directory с суффиксом .1, .2, .gz etc. Example: access.log → access.log.1 → access.log.2.gz.

Rotation не работает — как debug?

<code>logrotate -d</code> (dry-run) показывает что произойдёт. Status: <code>cat /var/lib/logrotate/status</code> — когда последний rotation.