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

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

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

直到我重新启动 Apache 后,它才会再次写入这些日志文件。

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

我在 Ubuntu 10.04 上有 Apache 2.2.14。

答案1

我刚刚做了一个简单的测试:

$ 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(似乎就地截断)

答案2

我建议强制旋转Apache2日志文件:

$ sudo logrotate -f /etc/logrotate.d/apache2

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

$ sudo /etc/init.d/apache2 reload

在 Ubuntu 上你也可以这样做:

$ sudo service apache2 reload

相关内容