MAATRIX / Блог / Ротация логов через logrotate

Ротация логов через logrotate

Настройка ротации логов через logrotate на VPS
Блог MAATRIX · 2026-07-07

Логи растут незаметно, пока однажды df -h не покажет 100% и сервер не начнёт падать. logrotate решает это: режет логи по расписанию, сжимает старые, удаляет просроченные. Настроим собственное правило для лога приложения — с ротацией, сжатием и корректным перезапуском сервиса.

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Зачем это нужно

Переполненный диск — одна из самых частых причин внезапного отказа сервера: перестают писаться логи, падают базы, отказывает веб-сервер. logrotate предотвращает это, автоматически управляя размером и количеством лог-файлов.

В большинстве дистрибутивов он уже установлен и запускается кроном или systemd-таймером ежедневно. Проверить наличие:

logrotate --version
systemctl status logrotate.timer

На ежедневных бэкапах MAATRIX аккуратная ротация особенно важна: раздутые логи не должны попадать в резервные копии и раздувать их.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS под приложение

Как устроен logrotate

Глобальный конфиг — /etc/logrotate.conf, а правила для отдельных программ лежат в /etc/logrotate.d/. Свои приложения удобно описывать именно там — отдельным файлом, не трогая системные.

logrotate ничего не делает мгновенно: он запускается по таймеру и проверяет условия (частота, размер). Ротация происходит, когда подходит время или файл превысил порог.

Правило для лога приложения

Создаём файл /etc/logrotate.d/myapp с правилом. Логи режем ежедневно, храним 14 архивов, сжимаем и не падаем, если лога временно нет:

/var/log/myapp/*.log {
    daily
    rotate 14
    missingok
    notifempty
    compress
    delaycompress
    copytruncate
    dateext
    su root root
}

Разберём ключевые директивы:

  • daily / rotate 14 — ротация раз в сутки, храним 14 поколений (две недели).
  • compress — старые логи gzip'уются; delaycompress откладывает сжатие на один цикл (удобно, если процесс ещё пишет в свежеповёрнутый файл).
  • copytruncate — копирует лог и обнуляет исходный на месте; подходит для приложений, которые не умеют переоткрывать файл по сигналу.
  • missingok / notifempty — не ругаться, если лога нет, и не ротировать пустой.
  • dateext — добавлять дату в имя архива вместо номера.

Вариант с перезапуском по сигналу

Если приложение умеет переоткрывать лог по сигналу (nginx, многие демоны) — вместо copytruncate используют postrotate. Это чище: без момента, когда пишут в уже скопированный файл.

/var/log/myapp/*.log {
    daily
    rotate 14
    compress
    delaycompress
    missingok
    notifempty
    sharedscripts
    postrotate
        systemctl reload myapp > /dev/null 2>&1 || true
    endscript
}

Директива sharedscripts гарантирует, что postrotate выполнится один раз для всех файлов правила, а не по разу на каждый.

Проверка без ожидания таймера

Не нужно ждать сутки — прогоните правило вручную. Флаг -d показывает, что logrotate сделал бы, ничего не меняя (dry-run):

sudo logrotate -d /etc/logrotate.d/myapp

Реальный запуск с принудительной ротацией:

sudo logrotate -f /etc/logrotate.d/myapp
ls -lh /var/log/myapp/

Частые ошибки

  • parse error — забыли фигурную скобку или точку с запятой; всегда проверяйте через logrotate -d.
  • Логи не сжимаются — включён delaycompress, первый архив всегда без сжатия, это норма.
  • Приложение продолжает писать в старый файл — оно держит дескриптор; используйте copytruncate или postrotate с reload.
  • Права: если каталог логов принадлежит не root, добавьте директиву su <user> <group>.

Нужен сервер под эту задачу?

Разверните VPS MAATRIX за пару минут: NVMe, AMD EPYC, root-доступ, локации UK, США и РФ. Оплата картой РФ и по СБП.

Арендовать VPS под приложение

Обсудить статью, задать вопрос или начать новую тему

Есть вопрос по этой статье, идея для обсуждения или просто хотите поделиться опытом? Сообщество MAATRIX ждёт. Для общения, пожалуйста, зарегистрируйтесь в нашем личном кабинете.

Перейти в сообщество →

Частые вопросы

copytruncate или postrotate — что выбрать?

Умеет ли приложение переоткрывать лог по сигналу — берите postrotate с reload. Не умеет — copytruncate, но есть крошечное окно, где записи могут потеряться.

Как ротировать по размеру, а не по дням?

Замените daily на size 100M — logrotate повернёт файл, как только он превысит 100 МБ, независимо от даты.

Куда смотреть, если ротация не идёт?

Проверьте systemctl status logrotate.timer и файл состояния /var/lib/logrotate/status — там дата последней ротации каждого лога.