Что такое logrotate в Linux?

«Что такое logrotate в Linux?» — вопрос из категории Linux, который задают на 23% собеседований Devops Инженер. Ниже — развёрнутый ответ с разбором ключевых моментов.

Ответ

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

Основные функции:

  • Ротация: Переименование текущего лог-файла (например, app.log -> app.log.1) и создание нового пустого.
  • Сжатие: Архивация старых логов с помощью gzip, bzip2 или xz для экономии места.
  • Удаление: Автоматическое удаление логов старше заданного срока или сверх лимита версий.
  • Уведомление сервисов: Выполнение скриптов (postrotate) для переоткрытия лог-файлов работающими демонами (например, nginx -s reload).

Типичная конфигурация в /etc/logrotate.d/myapp:

/var/log/myapp/*.log {
    daily           # Ротировать ежедневно
    missingok       # Не выдавать ошибку, если файл отсутствует
    rotate 30       # Хранить 30 архивных копий
    compress        # Сжимать архивы (gzip)
    delaycompress   # Сжимать не сразу, а со следующей ротации
    notifempty      # Не ротировать пустые файлы
    create 0644 appuser appgroup # Создавать новый файл с указанными правами и владельцем
    sharedscripts   # Выполнять скрипты один раз для всей группы файлов
    postrotate      # Скрипт, выполняемый после ротации
        /usr/bin/systemctl reload myapp.service > /dev/null 2>&1 || true
    endscript
}

Ключевые директивы:

  • Триггеры: daily, weekly, monthly, size 100M (при достижении размера).
  • Управление архивами: rotate N, maxage N (удалять файлы старше N дней).
  • Сжатие: compress, compresscmd, compressext.

Практическое использование:

  • Проверка конфигурации: logrotate -d /etc/logrotate.conf (тестовый прогон).
  • Принудительный запуск: logrotate -vf /etc/logrotate.d/myapp.
  • Для отладки проблем с ротацией (например, сервис не переоткрыл логи) первым делом проверяются скрипты в postrotate и права доступа к создаваемым файлам (create).