У нас есть сервер apache, работающий на Linux, который записывает в файл журнала, который становится очень большим (access_log). Нашему серверу станет не хватать места. Есть ли способ удалить или обрезать файл без перезапуска сервера (мы не хотим простоев).
Как сбросить файлы журнала
Рано или поздно вам захочется сбросить файлы журнала (access_log
и error_log
), потому что они слишком велики или полны старой информации, которая вам не нужна.
access_log
обычно увеличивается на 1 МБ на каждые 10 000 запросов.
Большинство людей первая попытка заменить файл журнала - это просто переместить файл журнала или удалить файл журнала. Это не работает.
Apache продолжит запись в файл журнала с тем же смещением, что и до перемещения файла журнала. В результате создается новый файл журнала, такой же большой, как и старый, но теперь он содержит тысячи (или миллионы) нулевых символов.
Правильная процедура - переместить файл журнала, а затем подать сигнал Apache, чтобы он снова открыл файлы журнала.
Apache сигнализируется с помощью SIGHUP (-1) сигнал. например
mv access_log access_log.old kill -1 `cat httpd.pid`
Примечание: httpd.pid
- это файл, содержащий идентификатор процесса демона Apache httpd, Apache сохраняет его в том же каталоге, что и файлы журнала.
Многие люди используют этот метод для замены (и резервного копирования) своих файлов журнала каждую ночь или каждую неделю.
Обнулить файл журнала ...
# :>filename
Ротация журналов - долгосрочное решение, но ответ на ваш непосредственный вопрос - обрезать файл примерно так:
sudo cat /dev/null > /var/log/httpd/access_log
Я предполагаю, что вы не вошли в систему как root и предполагаете местоположение вашего файла журнала, но вы должны иметь возможность настроить команду по мере необходимости и быстро обрезать открытый файл журнала, не касаясь ваших запущенных процессов apache.
Если вы хотите обрезать / обнулить файл журнала, к которому у вас нет доступа на запись, вы можете сделать
sudo truncate -s0 logfile
Попробуйте использовать logrotate
prerotate
и postrotate
copytruncate
позволяет копировать существующие файлы и затем обрезать их. При желании копию можно переместить в другое хранилище, такое как hadoop, s3, для резервного копирования./usr/sbin/logrotate --force /etc/logrotate.hourly.conf 2>&1 >> /tmp/logger
используя /etc/cron.hourly/logrotate
Для получения дополнительной информации man logrotate
Просто вы можете сделать сначала $ cat filename >bkp_filename
чем он создаст копию "filename", чем обнулит исходный файл, например $ >filename
он уменьшится до нулевого размера, теперь сделайте zip до bkp_filename, например $ gzip bkp_filename
так что он обеспечит больший размер, и ваша точка монтирования теперь зеленая
Была такая же проблема с процессом и исправлена с помощью именованного канала Linux. Вот что я сделал (при условии, что /tmp/job.log - это файл журнала):
Таким образом, я смог сохранить журнал и значительно сократить использование диска.
вы можете заменить gzip любой командой, которая фильтрует, вращает, ...