Как настроить автоматическую ротацию логов с помощью logrotate в Linux, чтобы файлы не переполняли системный диск?

Logrotate — стандартный инструмент Linux для автоматической ротации, сжатия и удаления лог-файлов. Он предотвращает переполнение диска, регулярно обрабатывая накопленные журналы.

## Как работает logrotate

Logrotate запускается через cron (обычно ежедневно через `/etc/cron.daily/logrotate`) и читает конфигурационные файлы из `/etc/logrotate.conf` и директории `/etc/logrotate.d/`.

## Основные директивы конфигурации

— **daily / weekly / monthly** — частота ротации
— **rotate N** — количество хранимых архивов (например, `rotate 7` хранит 7 файлов)
— **compress** — сжимать старые логи (gzip)
— **delaycompress** — сжимать не сразу, а при следующей ротации
— **missingok** — не выдавать ошибку, если файл отсутствует
— **notifempty** — не ротировать пустые файлы
— **create 0640 root adm** — создавать новый файл с заданными правами
— **postrotate / endscript** — команды, выполняемые после ротации
— **size 100M** — ротировать при достижении указанного размера
— **maxage 30** — удалять файлы старше 30 дней

## Пример конфигурации для nginx

Создайте файл `/etc/logrotate.d/nginx`:

/var/log/nginx/*.log {
daily
rotate 14
compress
delaycompress
missingok
notifempty
create 0640 www-data adm
sharedscripts
postrotate
[ -f /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid)
endscript
}

## Ротация по размеру файла

Если важен не период, а объём:

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

## Проверка конфигурации

Перед применением проверьте конфигурацию без реального выполнения:

bash
logrotate -d /etc/logrotate.d/nginx

Флаг `-d` запускает режим отладки (dry run).

Принудительный запуск ротации:

bash
logrotate -f /etc/logrotate.conf

## Глобальные настройки

В `/etc/logrotate.conf` задаются параметры по умолчанию для всех конфигураций:

weekly
rotate 4
create
compress
include /etc/logrotate.d

## Советы по предотвращению переполнения диска

1. **Мониторьте диск** командой `df -h` и настройте алерты при заполнении более 80%.
2. **Используйте `maxsize`** совместно с `daily` — ротация произойдёт раньше, если файл вырастет до лимита.
3. **Для высоконагруженных сервисов** устанавливайте `size` вместо временного интервала.
4. **Проверяйте статус** выполнения logrotate в `/var/lib/logrotate/status`.
5. **Разделяйте разделы**: вынесите `/var/log` на отдельный раздел, чтобы переполнение логов не затронуло корневую файловую систему.

Правильно настроенный logrotate полностью автоматизирует управление логами и исключает ситуацию, когда журналы занимают всё свободное место на диске.


Задайте вопрос нейросети

Не нашли ответ? Спросите ИИ — он подготовит развёрнутую статью.