Linux

Настройка logrotate: полное руководство по управлению логами в Linux

Настройте logrotate для автоматического управления логами в Linux. Пошагово создайте конфигурации для ротации, сжатия и удаления старых логов.

Обновлено 15 февраля 2026 г.
15-30 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 20.04/22.04Debian 11/12CentOS 8/Rocky 8RHEL 8/9Fedora 35+

Введение

Logrotate — это утилита для автоматического управления лог-файлами в Linux. Она предотвращает бесконтрольный рост логов, который может заполнить весь диск и привести к сбоям системы. С помощью logrotate вы настроите регулярную ротацию (переименование старых логов), сжатие архивов и удаление устаревших данных. После настройки процесс станет полностью автоматическим, а вы сэкономите время и место на диске.

Требования / Подготовка

Перед началом убедитесь, что:

  • На системе установлен пакет logrotate (обычно есть по умолчанию).
  • У вас есть права суперпользователя (sudo) для редактирования конфигурационных файлов в /etc/.
  • Вы знаете пути к лог-файлам, которые хотите ротировать (например, /var/log/nginx/access.log).
  • Рекомендуется базовое понимание структуры каталогов Linux и работы с текстовыми редакторами (nano, vim).

Шаг 1: Проверка установки logrotate

Откройте терминал и выполните команду:

logrotate --version

Если вы видите версию (например, logrotate 3.18.0), утилита установлена. Если команда не найдена, установите её:

Для Debian/Ubuntu:

sudo apt update
sudo apt install logrotate

Для RHEL/CentOS/Fedora:

sudo yum install logrotate   # CentOS/RHEL 7
sudo dnf install logrotate   # CentOS/RHEL 8+, Fedora

⚠️ Важно: На большинстве современных дистрибутивов logrotate предустановлен. Установка требуется редко.

Шаг 2: Изучение структуры конфигурационных файлов

Logrotate использует два типа конфигураций:

  1. Главный файл/etc/logrotate.conf. Он содержит глобальные настройки (например, частоту запуска) и может включать другие конфиги.
  2. Файлы приложений — в каталоге /etc/logrotate.d/. Каждый файл отвечает за ротацию логов конкретного сервиса или приложения.

Посмотрите примеры:

ls /etc/logrotate.d/

Вы увидите файлы для apt, dpkg, rsyslog и других. Это поможет понять синтаксис.

Откройте главный конфиг:

sudo cat /etc/logrotate.conf

Типичное содержимое:

# see "man logrotate" for details
weekly
rotate 4
create
include /etc/logrotate.d

Здесь weekly — глобальная частота ротации (если не переопределено в локальных конфигах), rotate 4 — хранить 4 архива, include — подключать конфиги из /etc/logrotate.d/.

Шаг 3: Создание конфигурационного файла для вашего приложения

Предположим, ваше приложение пишет логи в /var/log/myapp/ (файлы app.log, error.log). Создайте конфиг:

sudo nano /etc/logrotate.d/myapp

Вставьте базовую конфигурацию:

/var/log/myapp/*.log {
    daily
    rotate 7
    compress
    delaycompress
    missingok
    notifempty
    create 644 root root
    sharedscripts
    postrotate
        systemctl restart myapp.service > /dev/null 2>&1 || true
    endscript
}

Краткое описание параметров:

  • /var/log/myapp/*.log — шаблон для лог-файлов.
  • daily — ротация каждый день.
  • rotate 7 — хранить 7 архивов (старые будут удалены).
  • compress — сжимать архивы с помощью gzip.
  • delaycompress — сжимать не сразу, а на следующую ротацию (чтобы приложение могло писать в ещё не сжатый файл).
  • missingok — не выводить ошибку, если лог-файл отсутствует.
  • notifempty — не ротировать пустые файлы.
  • create 644 root root — создавать новый лог-файл с правами 644 и владельцем root:root.
  • sharedscripts — скрипты postrotate/prerotate выполняются один раз за весь набор файлов.
  • postrotate...endscript — команды после ротации (здесь перезапуск сервиса, чтобы он начал писать в новый лог).

Сохраните файл (Ctrl+X, затем Y и Enter в nano).

Шаг 4: Настройка параметров ротации

Конфигурация из шага 3 — хорошая база, но параметры нужно адаптировать под ваши задачи. Вот ключевые опции:

ПараметрЗначениеОписание
daily/weekly/monthlyЧастота ротации.
rotate NN — числоКоличество архивов для хранения.
compressСжимать архивы gzip (расширение .gz).
delaycompressОтложить сжатие на следующую ротацию (рекомендуется для активных логов).
missingokИгнорировать отсутствующие файлы.
notifemptyНе ротировать пустые файлы.
maxsize SIZEНапример, 100MРотировать, если размер превышает (даже если не прошло время).
size SIZEНапример, 50MРотировать по размеру (игнорирует частоту).
create MODE OWNER GROUPСоздавать новый лог-файл с указанными правами и владельцем.
postrotate/prerotateкомандыВыполнить скрипт до/после ротации (часто для переоткрытия логов).

Пример для ротации по размеру:

/var/log/myapp/*.log {
    size 100M
    rotate 5
    compress
    missingok
    notifempty
    create 644 root root
}

Здесь логи будут ротироваться, как только достигнут 100 МБ, но не чаще чем раз в день (если не указана частота).

Шаг 5: Тестирование конфигурации

Перед запуском в production проверьте конфиг:

sudo logrotate -d /etc/logrotate.conf

Флаг -d (debug) показывает, какие действия будут выполнены, но не вносит изменения. Вывод будет содержать строки вида:

reading config file /etc/logrotate.conf
including /etc/logrotate.d
...
rotating pattern: /var/log/myapp/*.log  after 1 days (7 rotations)
empty log files are not rotated, old logs are removed
...

Если есть ошибки (например, "error: bad directive"), исправьте конфиг.

Шаг 6: Принудительный запуск и автоматизация

Для немедленной ротации (например, чтобы проверить работу) выполните:

sudo logrotate -f /etc/logrotate.conf

Флаг -f (force) игнорирует временные ограничения.

Автоматизация: Logrotate обычно запускается ежедневно через cron. Проверьте задачу:

ls /etc/cron.daily/logrotate

Если файл существует, cron будет запускать logrotate автоматически (обычно в 6:25 утра). Для изменения времени отредактируйте файл или настройте аналог через systemd timer (в современных системах).

Проверка результата

  1. Перейдите в каталог с логами:
    ls -lh /var/log/myapp/
    
  2. Вы должны увидеть:
    • Активный лог-файл (например, app.log).
    • Сжатые архивы (например, app.log.1.gz, app.log.2.gz и т.д.) в зависимости от параметра rotate.
  3. Проверьте размеры: активный лог должен быть небольшим (если ротация прошла), архивы — сжаты.
  4. Также проверьте системный журнал на наличие ошибок logrotate:
    sudo grep logrotate /var/log/syslog
    

Возможные проблемы

Ошибка доступа к лог-файлам

💡 Если в логах или при запуске logrotate появляются Permission denied, убедитесь, что:

  • Файлы логов доступны для чтения пользователю, от которого запущен logrotate (обычно root).
  • В конфиге указан правильный владелец в create (например, create 644 www-data www-data для веб-сервера).

Логи не ротируются по расписанию

  • Проверьте, работает ли cron: sudo systemctl status cron (Debian/Ubuntu) или sudo systemctl status crond (RHEL/CentOS).
  • Убедитесь, что файл /etc/cron.daily/logrotate существует и исполняем (ls -l /etc/cron.daily/logrotate).
  • Если используется systemd timer, проверьте: sudo systemctl status logrotate.timer.

Сжатие не происходит

  • Убедитесь, что установлен gzip (обычно есть по умолчанию). Проверьте: which gzip.
  • В конфиге должен быть параметр compress (или delaycompress).
  • Если нужно сжимать другими алгоритмами (bzip2, xz), укажите compresscmd (например, compresscmd /usr/bin/bzip2).

Приложение продолжает писать в старый лог после ротации

Это частая проблема: после переименования лог-файла приложение не осознаёт этого и продолжает писать в старый дескриптор. Решение:

  • В блоке postrotate добавьте команду для переоткрытия логов. Например, для nginx:
    postrotate
        [ ! -f /var/run/nginx.pid ] || kill -USR1 `cat /var/run/nginx.pid`
    endscript
    
  • Для systemd-сервисов часто помогает systemctl restart service, но это может привести к кратковременному простою. Альтернатива — использовать kill -HUP (если приложение поддерживает).

Конфликты конфигураций

  • Logrotate обрабатывает файлы в /etc/logrotate.d/ в алфавитном порядке. Если два конфига пересекаются по одному лог-файлу, победит последний (по алфавиту). Избегайте дублирования.
  • Глобальные настройки из /etc/logrotate.conf применяются, только если не переопределены в локальном конфиге.

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

Как проверить, что logrotate работает корректно?
Можно ли настроить logrotate для конкретного каталога логов?
Что делать, если логи не ротируются по расписанию?
Как сжать логи без потери данных?

Полезное

Проверка установки logrotate
Изучение структуры конфигурации
Создание конфигурационного файла
Настройка параметров ротации
Тестирование конфигурации
Принудительный запуск и проверка