Назад | Перейти на главную страницу

Apache отказывается записывать в файл журнала после того, как я вручную удаляю все его содержимое

Почему 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