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. Для постоянных сервисов лучше задавать ограничение размера логов.