Системный журнал — практичная база знаний по VPS и Linux
Linux • logrotate • логи

Logrotate на Linux: чтобы логи не забили диск

Полный диск может остановить nginx, базу данных, Docker и даже SSH-сервисы. Очень часто место заканчивается из-за логов, которые никто не ограничивал.

Почему логи растут

Публичный сервер постоянно получает запросы. Даже если сайт небольшой, его сканируют боты, поисковые роботы и автоматические сканеры. Каждый запрос может попадать в access_log, а ошибки — в error_log.

du -sh /var/log/* 2>/dev/null | sort -h

Что делает logrotate

Logrotate периодически переименовывает старый лог, создаёт новый, сжимает архивы и удаляет слишком старые копии. Это позволяет хранить историю, но не давать одному файлу расти бесконечно.

Конфиги logrotate

Основные настройки находятся в /etc/logrotate.conf и /etc/logrotate.d/. Для nginx обычно есть отдельный файл.

ls -la /etc/logrotate.d/
cat /etc/logrotate.d/nginx

Почему после удаления лога место может не освободиться

Если процесс продолжает держать удалённый файл открытым, место на диске не освободится до перезапуска или переоткрытия лога.

lsof | grep deleted

Systemd-journald

Логи systemd тоже могут занимать место. Их можно ограничивать настройками journald или чистить по размеру.

journalctl --disk-usage
journalctl --vacuum-size=500M

Docker-логи

Docker JSON-логи могут быстро вырасти, если контейнер постоянно пишет в stdout/stderr. Для постоянных сервисов лучше задавать ограничение размера логов.

Проверяйте /var/lib/docker/containers, если диск заполнился, а /var/log выглядит небольшим.