August 11, 2026 · by CLIQHOST
Лог-файлы — незаменимый инструмент для любого системного администратора: они показывают, что происходит с сервисами, где возникают ошибки и кто пытается получить несанкционированный доступ. Но если оставить их без внимания, лог-файлы могут разрастись до нескольких гигабайт и полностью заполнить дисковое пространство — классический сценарий, который может «положить» рабочий сервер.
Элегантное решение называется 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 за производительность, надёжность и профессиональную техническую поддержку.
"We moved our online shop from a foreign host and the difference is night and day — pages load instantly and support replies in minutes, in Romanian."
"Migrated 12 client sites to CLIQHOST. Free migration, zero downtime, and the cPanel setup is exactly what my team needed. Highly recommend."
"Our NVMe VPS handles traffic spikes without a sweat. Full root, local datacenter, and billing in MDL — everything we wanted from a provider."