Почему Apache отказывается записывать в файлы журнала ( ErrorLog
/CustomLog
единицы) после того, как я вручную удалил их содержимое?
Он не будет записывать эти файлы журнала снова, пока я не перезапущу Apache.
Почему это так? Как безопасно очистить файл журнала без перезапуска Apache?
У меня Apache 2.2.14 на Ubuntu 10.04.
Я только что сделал небольшой тест:
$ echo vim test > vimtest
$ ls -i vimtest
35149 vimtest
$ vim vimtest
<dG, :wq>
$ ls -i vimtest
35148 vimtest
Обратите внимание, что vimtest
имеет другой номер inode после его редактирования и, таким образом, фактически является другим файлом (хотя и с тем же именем, что и старый файл).
Итак, когда вы редактируете файл с помощью vim, он удаляет старый файл и создает новый с тем же именем. Проблема, которую вы видите, вызвана тем, что Apache все еще записывает в старый (удаленный) файл (вы можете проверить это с помощью lsof
).
Если вы действительно хотите обрезать файл журнала, рассмотрите truncate -s 0 /path/to/file.log
(который, кажется, обрезается на месте)
Я бы рекомендовал принудительно повернуть Apache2 файлы журнала с:
$ sudo logrotate -f /etc/logrotate.d/apache2
Если вы посмотрите на /etc/logrotate.d/apache2
, вы увидите, что Apache2
конфигурация должна быть перезагружена после удаления файла журнала с помощью:
$ sudo /etc/init.d/apache2 reload
В Ubuntu вы также можете сделать:
$ sudo service apache2 reload