Очистить логи Apache можно командой truncate -s 0 /var/log/apache2/access.log или удалением файла с последующим перезагрузкой сервера. Это решит проблему нехватки дискового пространства за несколько минут.
Причины проблемы
- Apache ведёт логи всех запросов в файлы
access.logиerror.log - Без ротации логов файлы растут неограниченно и заполняют весь раздел диска
- Заполненный раздел приводит к невозможности записи новых данных и падению приложений
- На боевых серверах логи могут занимать десятки и сотни гигабайт за месяц
- Отсутствие автоматической ротации логов — типичная ошибка при настройке Apache
Пошаговая инструкция
- Подключитесь к серверу по SSH с правами администратора или пользователем с доступом
sudo - Определите путь к логам Apache командой
grep -r "CustomLog\|ErrorLog" /etc/apache2/ - Проверьте размер логов командой
du -sh /var/log/apache2/ - Остановите Apache командой
sudo systemctl stop apache2 - Очистите файл access.log командой
sudo truncate -s 0 /var/log/apache2/access.log - Очистите файл error.log командой
sudo truncate -s 0 /var/log/apache2/error.log - Удалите ротированные логи прошлых периодов командой
sudo rm -f /var/log/apache2/*.log.1 /var/log/apache2/*.log.2.gz - Запустите Apache командой
sudo systemctl start apache2 - Проверьте статус Apache командой
sudo systemctl status apache2 - Настройте автоматическую ротацию логов в конфиге
/etc/apache2/conf-available/other-vhosts-access-log.conf - Отредактируйте или создайте правило ротации в
/etc/logrotate.d/apache2с параметромdaily,size 100Mиrotate 7 - Проверьте синтаксис конфига Apache командой
sudo apache2ctl configtest
Часто задаваемые вопросы
Как безопасно удалить логи без остановки Apache? Используйте truncate -s 0 вместо rm — файл останется на месте, но его размер обнулится, и Apache продолжит писать в него без перезагрузки.
Почему логи снова быстро заполняются после очистки? Потому что нет автоматической ротации; настройте logrotate с периодичностью daily и максимальным размером size 100M в файле /etc/logrotate.d/apache2.
Где хранятся логи Apache на CentOS? На CentOS и RHEL логи находятся в /var/log/httpd/ вместо /var/log/apache2/, остальные команды аналогичны.