August 11, 2026 · by Alex M.
Лог-файлы — незаменимый инструмент для любого системного администратора: они показывают, что происходит с сервисами, где возникают ошибки и кто пытается получить несанкционированный доступ. Но если оставить их без внимания, лог-файлы могут разрастись до нескольких гигабайт и полностью заполнить дисковое пространство — классический сценарий, который может «положить» рабочий сервер.
Элегантное решение называется logrotate — стандартная утилита Linux, которая автоматизирует ротацию, сжатие и удаление старых лог-файлов. В этом руководстве вы узнаете, как правильно настроить её на VPS с Linux — будь то Nginx, Apache, MySQL или собственные приложения.
Logrotate — стандартный инструмент, предустановленный на большинстве дистрибутивов Linux (Ubuntu, Debian, CentOS, AlmaLinux). Он работает на основе центрального файла конфигурации и отдельных файлов для каждого сервиса.
Без logrotate файл /var/log/nginx/access.log на сервере с умеренным трафиком может достичь десятков гигабайт за несколько месяцев. На VPS SSD с ограниченным пространством это означает простой.
С logrotate вы задаёте простые правила:
- ротировать логи ежедневно/еженедельно/ежемесячно
- хранить последние N копий
- сжимать старые файлы
- отправлять сигналы сервисам после ротации (например, reload для Nginx)
На большинстве серверов logrotate уже установлен. Проверьте:
logrotate --version
Если не установлен:
# Ubuntu/Debian
sudo apt update && sudo apt install logrotate -y
# CentOS/AlmaLinux
sudo yum install logrotate -y
Основной файл конфигурации — /etc/logrotate.conf, конфигурации для отдельных сервисов — в директории /etc/logrotate.d/.
Откройте основной файл:
sudo nano /etc/logrotate.conf
Типичное содержимое:
# Еженедельная ротация по умолчанию
weekly
# Хранить 4 недели логов
rotate 4
# Создавать новые файлы логов после ротации
create
# Сжимать старые логи
compress
# Подключить конфигурации сервисов
include /etc/logrotate.d
Эти значения глобальные — применяются ко всем сервисам, у которых нет собственных настроек.
Файл /etc/logrotate.d/nginx обычно создаётся при установке Nginx. Вот оптимальная конфигурация:
/var/log/nginx/*.log {
daily
missingok
rotate 14
compress
delaycompress
notifempty
create 0640 www-data adm
sharedscripts
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid`
fi
endscript
}
Объяснение параметров:
- daily — ежедневная ротация
- rotate 14 — хранить 14 дней логов
- compress — сжимать старые файлы через gzip
- delaycompress — отложить сжатие на один цикл (полезно для сервисов с асинхронной записью)
- notifempty — не ротировать пустые файлы
- missingok — не выдавать ошибку, если файл отсутствует
- postrotate — команда, выполняемая после ротации; здесь отправляем USR1 в Nginx для повторного открытия лог-файлов
/var/log/apache2/*.log {
weekly
missingok
rotate 8
compress
delaycompress
notifempty
create 640 root adm
sharedscripts
postrotate
if invoke-rc.d apache2 status > /dev/null 2>&1; then
invoke-rc.d apache2 reload > /dev/null 2>&1
fi
endscript
}
Та же логика: после ротации Apache получает сигнал reload и начинает писать в новый файл.
Логи MySQL могут быстро расти на серверах с большим количеством запросов:
/var/log/mysql/mysql.log /var/log/mysql/mysql-slow.log /var/log/mysql/error.log {
daily
rotate 7
missingok
compress
delaycompress
notifempty
sharedscripts
postrotate
test -x /usr/bin/mysqladmin || exit 0
MYADMIN="/usr/bin/mysqladmin --defaults-file=/etc/mysql/debian.cnf"
if [ -f `$MYADMIN variables 2>/dev/null | awk '/pid_file/ { print $4 }'` ]; then
$MYADMIN flush-logs
fi
endscript
}
На управляемом выделенном сервере эта конфигурация обычно уже настроена командой администрирования. На неуправляемом сервере ответственность за настройку лежит на вас.
Если у вас есть приложение, которое пишет собственные логи (например, /var/log/myapp/app.log), создайте новый файл:
sudo nano /etc/logrotate.d/myapp
/var/log/myapp/*.log {
weekly
rotate 12
compress
delaycompress
missingok
notifempty
create 0644 appuser appgroup
dateext
dateformat -%Y-%m-%d
}
Параметры dateext и dateformat добавляют дату к имени ротированного файла вместо числового суффикса (.1, .2), что значительно упрощает идентификацию.
Перед тем как позволить logrotate работать автоматически, протестируйте конфигурацию:
# Симуляция (dry-run) — ничего не изменяет
sudo logrotate --debug /etc/logrotate.conf
# Принудительная ротация для конкретного файла
sudo logrotate --force /etc/logrotate.d/nginx
Проверьте файл состояния logrotate:
cat /var/lib/logrotate/status
Здесь вы увидите дату последней ротации для каждого отслеживаемого лог-файла.
Logrotate обычно запускается автоматически через ежедневный cron-задание. Проверьте:
cat /etc/cron.daily/logrotate
Если нужно запускать ротацию в конкретное время (а не в случайный момент в рамках cron.daily), добавьте явное задание:
sudo crontab -e
# Ротация логов каждую ночь в 02:00
0 2 * * * /usr/sbin/logrotate /etc/logrotate.conf
Это особенно полезно на выделенных серверах с интенсивным трафиком, где важно точно контролировать момент ротации.
Если Nginx или Apache продолжают писать в старый (переименованный) файл, новые логи не попадут в текущий файл. Всегда включайте блок postrotate.
Используйте delaycompress вместе с compress, чтобы избежать этой проблемы.
Параметр create должен указывать правильные права и владельца, иначе сервис не сможет писать в новый файл:
create 0640 www-data adm
Запускайте logrotate --debug после любых правок, чтобы поймать ошибки до автоматического запуска cron.
После настройки logrotate регулярно проверяйте место, занятое логами:
du -sh /var/log/*
Или отсортируйте по размеру:
du -sh /var/log/* | sort -rh | head -20
Если вы пользуетесь нашими услугами администрирования серверов, команда CLIQHOST настроит logrotate, будет следить за дисковым пространством и проактивно оповещать вас о проблемах.
Также рекомендуем ознакомиться с материалами в нашем блоге — там вы найдёте другие практические руководства по администрированию Linux-серверов.
Logrotate — простая, но незаменимая утилита для любого Linux-сервера в продакшне. Правильная настройка гарантирует, что лог-файлы не израсходуют всё дисковое пространство, а важная информация будет храниться в организованном виде.
Кратко:
- Проверьте и настройте файлы в /etc/logrotate.d/
- Тестируйте с --debug перед выводом в продакшн
- Убедитесь, что сервисы получают сигнал reload после ротации
- Регулярно проверяйте /var/lib/logrotate/status
Если вам нужна стабильная и производительная Linux-среда для применения этих настроек, рассмотрите VPS NVMe от CLIQHOST — с быстрыми NVMe-дисками, выделенным IPv4 и полным root-доступом. Остались вопросы? Свяжитесь с нашей командой — мы готовы помочь.
Реальные отзывы клиентов, которые доверяют CLIQHOST за производительность, надёжность и профессиональную техническую поддержку.
"Перенесли интернет-магазин с зарубежного хостинга — разница огромная: страницы открываются мгновенно, а поддержка отвечает за минуты, на румынском."
"Перенесли 12 клиентских сайтов на CLIQHOST. Бесплатная миграция, нулевой даунтайм, а настройка cPanel — именно то, что нужно нашей команде. Очень рекомендую."
"Наш VPS NVMe спокойно держит пики трафика. Полный root, локальный дата-центр и оплата в MDL — всё, что мы хотели от провайдера."