Как использовать logrotate для ротации и очистки логов в Linux
Логи в Linux растут быстро — особенно если речь идёт о веб-серверах, приложениях и системных сервисах. Если их не ограничивать, они могут занять весь диск, привести к сбоям и даже остановке сервисов.
Для автоматического управления логами используется утилита logrotate — стандартный инструмент ротации, архивирования и удаления лог-файлов.
В этой статье разберём, как работает logrotate, как он обрабатывает логи, где хранится конфигурация и как настроить ротацию для любого сервиса.
Что такое logrotate и зачем он нужен
logrotate — утилита, которая:
- автоматически ротирует логи (создаёт новые файлы, старые переименовывает);
- сжимает их в архивы (gzip, bzip2);
- удаляет старые файлы по сроку;
- ограничивает размер логов;
- выполняет дополнительные команды до/после ротации.
Она запускается по cron (/etc/cron.daily/logrotate) или через systemd-таймер, в зависимости от дистрибутива.
Где хранятся конфигурации logrotate
Logrotate использует два типа конфигов:
Основной конфиг
/etc/logrotate.conf
Обычно задаёт глобальные настройки: периодичность, компрессию, количество хранимых архивов и т.д.
Конфиги сервисов
/etc/logrotate.d/
Каждый файл в этой директории — отдельная политика ротации (nginx, apache2, mysql и т.д.).
Пример простой конфигурации
Допустим, нужно ротировать файл:
/var/log/myapp/app.log
Создаём конфиг:
/etc/logrotate.d/myapp
/var/log/myapp/app.log {
weekly
rotate 4
compress
missingok
notifempty
create 0640 root adm
}
Разбор параметров:
- weekly — ротация раз в неделю.
- rotate 4 — хранить 4 архива.
- compress — архивировать старые файлы в
.gz. - missingok — не ругаться, если файла нет.
- notifempty — не ротировать пустой лог.
- create — создать новый файл после ротации с указанными правами.
Ротация по размеру
Если лог растёт непредсказуемо, удобнее использовать ограничение по размеру:
/var/log/myapp/app.log {
size 50M
rotate 10
compress
}
Здесь лог ротируется, как только его размер превысит 50МБ.
Команды before/after (prerotate и postrotate)
Удобно, если сервису нужно отправить сигнал после ротации логов.
Например, Nginx должен вызвать nginx -s reopen:
/var/log/nginx/*.log {
daily
rotate 7
compress
missingok
notifempty
sharedscripts
postrotate
systemctl reload nginx >/dev/null 2>&1 || true
endscript
}
Ключевые моменты:
- sharedscripts — команда выполняется один раз, даже если совпадает несколько файлов.
- postrotate / endscript — блок команд после ротации.
Принудительная ротация вручную
Проверяем конфигурацию:
logrotate -d /etc/logrotate.conf-d только показывает, что будет сделано.
Запускаем ротацию вручную:
logrotate -f /etc/logrotate.conf-f — принудительный запуск независимо от условий.
Как работает порядок ротации
Представим лог:
app.log
После ротации:
app.log → app.log.1
app.log.1.gz → app.log.2.gz
…
Logrotate сам «сдвигает» версии в сторону увеличения.
Политика хранения: rotate vs maxage
Два похожих параметра:
rotate N
Хранит N архивов.
Пример:
rotate 7
→ будет app.log.1.gz … app.log.7.gz
maxage N
Удаляет файлы старше N дней.
Пример:
maxage 30
→ удалит всё старше 30 дней, даже если rotate >= 10.
Эти параметры можно комбинировать.
Ротация для приложений с нестандартным логированием
Если приложение открывает файлы каждый раз заново — лог можно просто заменить create.
Но если оно держит файловый дескриптор постоянно (Node.js, Python, Java), используется:
copytruncate
Пример:
/var/log/myapp/app.log {
daily
rotate 5
compress
copytruncate
}
Как работает copytruncate:
- создаёт копию старого файла;
- текущий файл обрезает до нуля.
Это позволяет избежать сигналов reopen и перезапуска приложения.
Минус — возможно потерять часть данных в момент копирования.
Использование systemd-таймера вместо cron
На современных системах логика ротации живёт в systemd:
Проверить:
systemctl status logrotate.timerЗапустить вручную:
systemctl start logrotate.serviceПосмотреть расписание:
systemctl list-timers | grep logrotateИтоги
logrotate — гибкий инструмент для автоматического управления логами в Linux. Он позволяет:
- ограничивать размер логов;
- выполнять архивирование;
- автоматически создавать новые файлы;
- отправлять сервисам сигналы для корректной работы;
- удалять устаревшие логи по дате или количеству.
Для админов и разработчиков это базовый инструмент, который должен быть настроен в каждой продакшн-среде.
Настроить мониторинг за 30 секунд
Надежные оповещения о даунтаймах. Без ложных срабатываний