Linux

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

Узнайте, как настроить автоматическую ротацию логов с помощью logrotate, чтобы освободить дисковое пространство и упростить администрирование Linux-сервера.

Обновлено 9 апреля 2026 г.
10-15 мин
Средняя
FixPedia Team
Применимо к:Ubuntu 20.04+Debian 10+CentOS 8+RHEL 8+

Зачем нужна ротация логов

На любом Linux-сервере приложения постоянно пишут логи — системные события, ошибки, доступы. Без управления эти файлы растут бесконечно и могут заполнить весь диск. Logrotate решает эту проблему: автоматически сжимает старые логи, переименовывает их по дате и удаляет устаревшие записи. Без ротации вы рискуете получить остановку сервиса из-за переполненного диска.

В этом гайде вы настроите ротацию логов для любого приложения: от Nginx и Apache до собственных скриптов.

Требования

  • Linux-сервер (Ubuntu, Debian, CentOS, RHEL)
  • Доступ к терминалу с правами root или sudo
  • Базовое понимание работы с конфигурационными файлами

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

Большинство дистрибутивов поставляют logrotate «из коробки». Проверьте наличие:

which logrotate
logrotate --version

Если команда не найдена, установите:

Ubuntu/Debian:

sudo apt update
sudo apt install logrotate

CentOS/RHEL:

sudo dnf install logrotate

Шаг 2: Структура конфигурационных файлов

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

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

Просмотрите главный конфиг:

cat /etc/logrotate.conf

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

# Глобальные настройки
weekly          # ротация раз в неделю
rotate 4        # хранить 4 старые копии
create          # создавать новый пустой файл после ротации
compress        # сжимать старые логи (обычно через gzip)
include /etc/logrotate.d

Шаг 3: Создание конфига для приложения

Допустим, вы хотите ротировать логи веб-сервера Nginx. Создайте файл:

sudo nano /etc/logrotate.d/nginx

Добавьте настройки:

/var/log/nginx/*.log {
    daily              # ротация каждый день
    missingok          # не считать ошибкой отсутствие файла
    rotate 14          # хранить 14 архивных копий
    compress           # сжимать архивы (gzip)
    delaycompress      # сжимать не сразу, а на следующий день
    notifempty         # не ротировать пустые файлы
    create 0640 www-data adm  # права на новый файл
    sharedscripts      # скрипты выполняются один раз для всех файлов
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

Разбор ключевых параметров:

ПараметрНазначение
daily/weekly/monthlyКак часто делать ротацию
rotate NСколько старых копий хранить
compressСжимать архивы (добавляет .gz)
delaycompressСжать на следующий цикл
missingokНе报错 если файл отсутствует
notifemptyПропустить пустые файлы
size 100MРотировать при достижении размера

Шаг 4: Пример для нескольких приложений

Конфиг для MySQL/MariaDB:

/var/log/mysql/*.log {
    daily
    rotate 7
    compress
    missingok
    create 0600 mysql mysql
}

Конфиг для Python-приложения с ротацией по размеру:

/var/log/myapp/*.log {
    size 50M
    rotate 5
    compress
    missingok
    notifempty
}

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

Важно: всегда тестируйте новые настройки перед применением.

Режим отладки (без реальных изменений):

sudo logrotate -d /etc/logrotate.conf

Вы увидите, какие действия выполнит logrotate, но файлы останутся нетронутыми.

Принудительный запуск (для проверки прямо сейчас):

sudo logrotate -f /etc/logrotate.conf

После этого проверьте, появились ли архивные файлы:

ls -la /var/log/nginx/

Шаг 6: Настройка автоматического запуска

Logrotate обычно вызывается через cron. Проверьте:

ls -la /etc/cron.daily/logrotate
cat /etc/cron.d/logrotate

В Ubuntu/Debian это скрипт в /etc/cron.daily/, который запускается раз в сутки. В CentOS/RHEL может использоваться /etc/cron.daily/logrotate.

Если нужно изменить время запуска, отредактируйте cron:

sudo crontab -e

Добавьте строку (например, запуск в 3 часа ночи):

0 3 * * * /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf

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

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

  1. Архивные файлы появляются с датой или номером: access.log.1, access.log.2.gz
  2. Старые файлы сжимаются в .gz
  3. Количество файлов не превышает значение rotate
  4. Логи старше срока хранения удаляются автоматически

Проверьте через неделю:

ls -lh /var/log/nginx/

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

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

  • Проверьте права доступа: ls -la /var/log/приложение/
  • Убедитесь, что путь в конфиге совпадает с реальным расположением логов

Ошибка «error: destination /var/log/... already exists»

  • Удалите старые архивы вручную или увеличьте значение rotate

Postrotate-скрипт не выполняется

  • Проверьте синтаксис: команда между postrotate и endscript
  • Убедитесь, что процесс (nginx, apache) запущен

Диск всё равно заполняется

  • Проверьте, что compress включён
  • Уменьшите значение rotate или добавьте size для более частой ротации

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

Как проверить, работает ли logrotate?
Почему логи не ротируются?
Как изменить частоту ротации?
Нужно ли устанавливать logrotate отдельно?

Полезное

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

Эта статья помогла вам решить проблему?