Использование logrotate в Linux

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

    Использование logrotate

    logrotate не работает как служба, поэтому нет необходимости в ее запуске или перезагрузке
    Ротация логов настраивается в отдельных файлах, расположенных по пути /etc/logrotate.d/

    Параметры

    /var/log/nginx/*.log - это путь к файлу, который нужно ротировать
    rotate N - Хранить последние N ротированных файлов. Остальные удалять.
    maxage - выполнять ротацию журнала, если дата модификации файла старше, чем указано в директиве
    copytruncate - сначала создается копия файла лога, после уже обрезается действующий. Необходимо, когда программа должна писать лог непрерывно. Однако здесь есть 2 минуса: долгое выполнение при больших объемах и вероятность потерять небольшое число записей
    size=xM - Пока размер лог-файла не превысит x мегабайт, он не будет ротироваться
    missingok - Если файла не существует, не выкидывать ошибку
    notifempty - Если файл пустой, не выполнять никаких действий
    daily - Делать ротацию каждый день
    olddir - перемещать старые логи в отдельную папку
    dateext - добавляет дату ротации перед заголовком старого лога
    compress - Сжимать ротированные файлы
    delaycompress - Сжимать только предыдущий журнал. Позволяет избежать ошибок, связанных с отсутствием доступа к используемому файлу
    prerotate ... endscript - Скрипт, который необходимо выполнить перед чисткой лога
    postrotate ... endscript - Скрипт, который необходимо выполнить после чистки лога
    sharedscripts - Если мы указали выполнить ротацию для нескольких файлов (например, при помощи *), скрипт prerotate/postrotate будет выполняться для каждого из них. Данная опция указывает, что скрипт нужно выполнить один раз после завершения ротации всех файлов.


    После настройки необходимо проверять работу сервиса после ротации лога. Некоторые службы могут перестать работать без лог-файла. В таком случае необходимо создавать новый (create). Также, в некоторых случаях, сервис необходимо перезапускать, так как при создании нового файла меняется его дескриптор.

    Можно разово запустить ротацию, а также настроить автозапуск
    Принудительный запуск выполняется со следующим синтаксисом:
    logrotate -f путь к файлу конфигурации
    Пример:
    logrotate -f /etc/logrotate.d/nginx
    Задание на автоматический запуск создается по умолчанию в файле /etc/cron.daily/logrotate, но стоит проверить

    Если для какого-то приложения необходимо выполнять ротацию лога по особому расписанию
    which logrotate
    Получив путь, создаем правило в cron:
    0 0 * * * /usr/sbin/logrotate /etc/logrotate.d/nginx

    или запуск логов для всех служб:
    0 0 * * * /usr/sbin/logrotate /etc/logrotate.conf

    Источник: https://www.dmosk.ru/miniinstruktions.php?mini=logrotate-linux
    Примеры настроек logrotate: https://www.dmosk.ru/miniinstruktions.php?mini=logrotate-example

    Проверка работы logrotate

    Выполнение ротации лог файлов зависит не только от размера или даты модификации лог-файла, также учитывается дата последней проверки состояния лог файла, которая записывается в файл: /var/lib/logrotate.status
    Поэтому перед пробным запуском logrotate, кроме размера файла или его даты модификации, необходимо изменить дату проверки состояния
    В следующем примере используется опция -v для подробного вывода работы утилиты logrotate
    Можно также использовать опцию -d (debbug), которая позволяет увидеть результат без выполнения каких либо изменений (ротации)

    vim /var/lib/logrotate.status touch -mad "2025-03-13 12:15:25" error.log; touch -mad "2025-03-13 12:15:25" access.log; logrotate -v /etc/logrotate.d/nginx
    Пример ротации логов nginx
    sudo mkdir -p /var/log/nginx/old_log sudo chown -R www-data:root /var/log/nginx /var/log/nginx/*.log { rotate 40 missingok compress delaycompress notifempty sharedscripts daily create 0644 www-data root dateext olddir /var/log/nginx/old_log postrotate /etc/init.d/nginx --quiet --ifstarted reopen endscript } #Запись в cron 0 2 * * * /usr/sbin/logrotate /etc/logrotate.d/nginx
    Пример ротации логов postgresql
    sudo mkdir -p /var/log/postgresql/old_log sudo chown -R postgres:postgres /var/log/postgresql sudo chmod -R 600 /var/log/postgresql/old_log #/etc/logrotate.d/postgresql /var/log/postgresql/*.log { rotate 100 size=300M missingok compress delaycompress copytruncate notifempty sharedscripts daily create 0600 postgres postgres dateext olddir /var/log/postgresql/old_log } #Запись в cron 0 2 * * * /usr/sbin/logrotate /etc/logrotate.d/nginx 0 2 * * * /usr/sbin/logrotate /etc/logrotate.d/postgresql
    Источники
    Последнее изменение: 17.03.2025 10:32


    Связанные темы
    Здесь пока нет комментариев
    Добавлять комментарии могут только авторизованные пользователи

    Авторизоваться
    Я буду рекламой
    Я тоже буду рекламой
    И я
    ВВЕРХ