Гид по технологиям

Управление логами с помощью logrotate на Ubuntu

• 4 min read • Linux • Обновлено 18 Nov 2025
Logrotate на Ubuntu: настройка и тестирование
Logrotate на Ubuntu: настройка и тестирование

Пример логов на сервере Ubuntu, готовых к ротации

Введение

Лог-файлы критичны для безопасности и отладки Linux-систем. logrotate — стандартный инструмент, который автоматизирует ротацию логов: создание новых файлов, сжатие старых, удаление по политике и отправку по почте. Он удобен, гибок и интегрируется с cron.

Кратко: ротация означает создание нового файла лога и архивирование/удаление старых записей по заданным правилам.

Требования

  • Сервер с Ubuntu
  • Некорневой пользователь с sudo-привилегиями

Установка logrotate

По умолчанию logrotate обычно уже установлен в Ubuntu. Если нет — установите так:

sudo apt install logrotate -y

Проверить работу и версию можно командой:

sudo logrotate

Вывод (пример):

logrotate 3.11.0 - Copyright (C) 1995-2001 Red Hat, Inc.
This may be freely redistributed under the terms of the GNU Public License

Usage: logrotate [-dfv?] [-d|--debug] [-f|--force] [-m|--mail=command]
        [-s|--state=statefile] [-v|--verbose] [-l|--log=STRING] [--version]
        [-?|--help] [--usage] [OPTION...] 

Основные конфигурационные файлы и расположение

  • Основной файл: /etc/logrotate.conf
  • Дополнительные конфигурации: /etc/logrotate.d/
  • Cron‑задача: /etc/cron.daily/logrotate

Посмотреть содержимое каталога конфигов:

ls /etc/logrotate.d

Пример вывода:

alternatives  apport  dpkg  mysql-server  rsyslog  unattended-upgrades
apache2       apt     lxd   openproject   ufw

Основные опции logrotate и их назначение

  • missingok — не выдавать ошибку, если лог отсутствует
  • weekly — ротация раз в неделю (есть daily, monthly)
  • create — после ротации создать новый пустой файл лога с правами
  • compress — сжимать старые логи gzip
  • rotate 4 — хранить 4 версии до удаления (здесь — 4 недели при weekly)
  • notifempty — не проводить ротацию пустого файла

Ниже — краткий «шпаргалка» по часто используемым опциям:

# Пример: /var/log/myapp/*.log
/var/log/myapp/*.log {
    weekly
    rotate 4
    compress
    delaycompress
    missingok
    notifempty
    create 0640 root adm
}
  • delaycompress — откладывает сжатие до следующей ротации (полезно когда процессы всё ещё записывают в старые файлы)
  • postrotate /endscript — скрипты для перезапуска сервиса после ротации (например, перезапуск rsyslog или apache)

Тестирование конфигурации (на примере Apache)

Для теста запускают logrotate в режиме отладки, чтобы увидеть, что бы он сделал, но не выполнять реальную ротацию:

sudo logrotate -d /etc/logrotate.d/apache2

Пример вывода (сокращённо):

reading config file /etc/logrotate.d/apache2
Reading state from file: /var/lib/logrotate/status
Allocating hash table for state file, size 64 entries

Handling 1 logs

rotating pattern: /var/log/apache2/*.log  after 1 days (14 rotations)
empty log files are not rotated, old logs are removed
considering log /var/log/apache2/access.log
Creating new state
  Now: 2018-10-11 16:04
  Last rotated at 2018-10-11 16:00
  log does not need rotating (log has been already rotated)
considering log /var/log/apache2/error.log
Creating new state
  Now: 2018-10-11 16:04
  Last rotated at 2018-10-11 16:00
  log does not need rotating (log has been already rotated)
considering log /var/log/apache2/other_vhosts_access.log
Creating new state
  Now: 2018-10-11 16:04
  Last rotated at 2018-10-11 16:00
  log does not need rotating (log has been already rotated)
not running prerotate script, since no logs will be rotated
not running postrotate script, since no logs were rotated

Если нужен принудительный запуск (выполнить ротацию сразу), используйте флаг –force:

sudo logrotate -f /etc/logrotate.d/apache2

Важные рекомендации

Важно: logrotate обычно запускается от root через cron; конфигурации в /etc/logrotate.d выполняются с правами root. Скрипты prerotate/postrotate также выполняются от root — учитывайте безопасность и права доступа.

Примечание: если сервис держит открытый дескриптор на старый файл лога, нужно перезапустить сервис или послать ему сигнал, чтобы он начал писать в новый файл (это делается через postrotate).

Типичные причины, когда logrotate не срабатывает

  • Неправильные права на каталоги/файлы: logrotate не может создать/переименовать файлы
  • Сервис продолжает писать в старый дескриптор — требуется restart/reload
  • Файл состояния (/var/lib/logrotate/status) повреждён или содержит некорректные записи
  • Конфликтующие правила в /etc/logrotate.conf и /etc/logrotate.d/

Как диагностировать: запустите с -d (debug) и -v (verbose), проверьте логи cron и права файлов.

Шаблон конфигурации для собственного приложения

Добавьте файл, например /etc/logrotate.d/myapp с содержимым:

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

Пояснение: daily — ротация ежедневно; rotate 7 — хранить 7 архивов; sharedscripts — запустить postrotate один раз для всех файлов.

Чек‑лист администратора перед запуском

  • Проверить владельца и права файлов логов
  • Убедиться, что postrotate корректно перезапускает процесс
  • Протестировать с sudo logrotate -d <конфиг>
  • При необходимости выполнить sudo logrotate -f <конфиг>
  • Проверить /var/log после ротации, убедиться в наличии .gz и новых файлов

Критерии приёмки

  • Логи ротацированы в соответствии с политикой (daily/weekly/monthly)
  • Количество архивов соответствует параметру rotate
  • Сжатые файлы присутствуют (.gz) при включённой опции compress
  • Сервис продолжает логировать в новый файл после postrotate
  • Отсутствие ошибок в выводе logrotate в режиме -d/-v

Когда использовать альтернативы

  • systemd-journald лучше подходит, если вы уже активно используете journald и хотите централизованное хранение
  • Сторонние решения (ELK/Graylog/Fluentd) нужны при агрегации логов с множества машин и продвинутом поиске/аналитике

Краткая методика внедрения (мини‑методология)

  1. Инвентаризация логов: какие файлы и где
  2. Определение требований хранения и сжатия (сколько архивов, частота)
  3. Написание конфигов в /etc/logrotate.d
  4. Тестирование (-d, -v) и принудительная ротация (-f)
  5. Мониторинг после внедрения

Кейс тестирования и критерии приёмки (тестовые сценарии)

  • Запустить ротацию в отладочном режиме: ожидается корректный план действий, без ошибок
  • Выполнить принудительную ротацию и проверить, что создан новый файл лога
  • Проверить, что postrotate корректно перезапустил сервис и новые записи попадают в новый файл
  • Убедиться, что старые файлы сжаты и укладываются в политику rotate

Глоссарий (одно предложение)

  • Ротация: процесс архивирования/переименования текущего лога и создания нового пустого файла.
  • compress: сжатие старых логов для экономии места.
  • postrotate: скрипт, выполняемый после ротации, обычно для перезапуска сервиса.

Краткая сводка и рекомендации

Logrotate — надёжный инструмент для базовой ротации логов на Ubuntu. Для простых сценариев он обычно достаточен: настраивайте правила в /etc/logrotate.d, тестируйте с -d, при необходимости используйте postrotate для перезапуска сервисов. Для централизованной агрегации логов рассматривайте ELK/Graylog.

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


Полезные ссылки: проверьте /etc/logrotate.conf и /etc/cron.daily/logrotate для деталей системы.

Поделиться: X/Twitter Facebook LinkedIn Telegram
Автор
Редакция

Похожие материалы

Несколько аккаунтов Skype: Multi Skype Launcher
Программное обеспечение

Несколько аккаунтов Skype: Multi Skype Launcher

Журнал для работы: повысить продуктивность
Productivity

Журнал для работы: повысить продуктивность

Персональные звуки уведомлений на Android
Android.

Персональные звуки уведомлений на Android

Скачивание шоу Hulu для офлайн‑просмотра
Стриминг

Скачивание шоу Hulu для офлайн‑просмотра

Microsoft Start: персонализированная новостная лента
Новости

Microsoft Start: персонализированная новостная лента

Как изменить имя в Epic Games быстро
Гайды

Как изменить имя в Epic Games быстро