Логи сервера растут непрерывно. Без ротации они заполнят весь диск. Logrotate автоматически сжимает, архивирует и удаляет старые лог-файлы по расписанию.
Проверить существующие правила
# Посмотреть все конфиги logrotate
ls /etc/logrotate.d/
# Протестировать без реальной ротации
sudo logrotate --debug /etc/logrotate.conf
Создать правило для своего приложения
# /etc/logrotate.d/myapp
/var/log/myapp/*.log {
daily # Ротация каждый день
missingok # Не ошибаться если файл отсутствует
rotate 14 # Хранить 14 архивов
compress # Сжать gzip
delaycompress # Не сжимать последний архив
notifempty # Не ротировать пустые файлы
create 0640 www-data www-data # Права нового файла
postrotate
systemctl reload nginx > /dev/null 2>&1 || true
endscript
}
Параметры logrotate
| Параметр | Описание |
|---|---|
| daily/weekly/monthly | Период ротации |
| rotate N | Количество архивов |
| size 100M | Ротация по размеру |
| compress | Сжать gzip |
| maxage 30 | Удалять архивы старше 30 дней |
| sharedscripts | postrotate выполняется один раз |
Принудительная ротация прямо сейчас
sudo logrotate --force /etc/logrotate.d/myapp
✅ Logrotate запускается ежедневно через cron (/etc/cron.daily/logrotate). Обычно ничего дополнительно настраивать не нужно.
Освобождение места от старых логов
# Найти большие лог-файлы
sudo find /var/log -name "*.log" -size +100M
# Очистить файл без удаления (процесс продолжает писать)
sudo truncate -s 0 /var/log/nginx/access.log
# Или через journald
sudo journalctl --vacuum-size=500M