Она помогает ограничивать рост логов: переносит старые файлы, сжимает их, удаляет устаревшие копии и при необходимости выполняет команды после ротации.
logrotate не работает постоянно в фоне.
Его запускает cron (
/etc/cron.daily/logrotate) или systemd-таймер (logrotate.timer), обычно раз в сутки.При запуске утилита читает конфиги, проверяет условия ротации и выполняет действия, если файл подходит под заданные правила.
➡️ Где лежат конфиги?
— /etc/logrotate.conf — основной файл с глобальными настройками.
— /etc/logrotate.d/ — каталог с отдельными конфигами для каждого сервиса (nginx, postgres и т.д.)
➡️ Пример конфига для приложения:
Допустим, нужно ротировать логи своего приложения в /
var/log/myapp/. Создаётся файл
/etc/logrotate.d/myapp:
daily
rotate 14
size 100M
compress
delaycompress
missingok
notifempty
create 0640 myapp myapp
sharedscripts
postrotate
systemctl reload myapp >/dev/null 2>&1 || true
endscript
}
➡️Что задано:
—
daily — проверять ротацию каждый день.—
rotate 14 — хранить 14 архивных копий.—
maxsize 100M — ротировать файл при проверке, если он превысил 100 МБ.—
compress — сжимать старые логи.—
delaycompress — сжимать файл на следующем цикле ротации.—
missingok — продолжать работу, если лог-файл отсутствует.—
notifempty — не ротировать пустой файл.—
create 0640 myapp myapp — создать новый лог-файл с нужными правами и владельцем.—
sharedscripts — выполнить postrotate один раз для всей группы файлов.—
postrotate ... endscript — выполнить команду после ротации.➡️ Полезные команды
➡️ Проверить конфиг без изменений (dry-run):
logrotate -d /etc/logrotate.d/myapp
➡️ Принудительно запустить ротацию, игнорируя расписание:
logrotate -f /etc/logrotate.conf
➡️ Подробный вывод того, что происходит:
logrotate -v /etc/logrotate.conf
👀 Обычно logrotate уже настроен при установке сервисов. Но его правила стоит проверять: от них зависит, как долго хранятся логи, когда они сжимаются и сколько места занимают на диске.
#линуксятина
