在我手动删除日志文件的所有内容后,Apache 拒绝写入日志文件

Ato*_*ult 10 ubuntu apache-2.2

为什么 Apache 拒绝写入日志文件(ErrorLog/CustomLog在我手动删除)内容后?

在我重新启动 Apache 之前,它不会再次写入这些日志文件。

为什么会这样?如何安全地清除日志文件而不必重新启动 Apache?

我在 Ubuntu 10.04 上有 Apache 2.2.14。

nic*_*rim 14

我只是做了一个简短的测试:

$ echo vim test > vimtest
$ ls -i vimtest
35149 vimtest
$ vim vimtest
<dG, :wq>
$ ls -i vimtest
35148 vimtest
Run Code Online (Sandbox Code Playgroud)

注意 vimtest编辑后具有不同的 inode-number,因此实际上是不同的文件(尽管与旧文件具有相同的名称)。

因此,当您使用 vim 编辑文件时,它会删除旧文件,并创建一个同名的新文件。您看到的问题是由 Apache 仍在写入旧(已删除)文件引起的(您可以使用lsof)。

如果您真的想截断日志文件,请考虑truncate -s 0 /path/to/file.log(似乎就地截断)

  • echo &gt; /path/to/file.log 也有效 (2认同)

Ped*_*ano 8

我建议使用以下命令强制轮换Apache2日志文件:

$ sudo logrotate -f /etc/logrotate.d/apache2
Run Code Online (Sandbox Code Playgroud)

如果您查看/etc/logrotate.d/apache2,您会看到Apache2在删除其日志文件后必须重新加载配置:

$ sudo /etc/init.d/apache2 reload
Run Code Online (Sandbox Code Playgroud)

在 Ubuntu 上,您也可以这样做:

$ sudo service apache2 reload
Run Code Online (Sandbox Code Playgroud)