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

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

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

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

我在Ubuntu 10.04上安装了Apache 2.2.14。

我只是做了一个简短的testing:

 $ echo vim test > vimtest $ ls -i vimtest 35149 vimtest $ vim vimtest <dG, :wq> $ ls -i vimtest 35148 vimtest 

请注意, vimtest在编辑后有不同的inode-number,因此实际上是一个不同的文件(虽然名称与旧文件相同)。

所以,当你使用vim编辑文件时,它会删除旧文件,并创build一个新文件名。 你看到的问题是由Apache仍然写入旧的(删除的)文件(你可以用lsof来检查)。

如果你真的想截断一个日志文件,可以考虑truncate -s 0 /path/to/file.log (它似乎在原地截断)

我build议强制Apache2日志文件的轮换

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

如果您查看/etc/logrotate.d/apache2 ,您将看到在使用以下命令删除其日志文件后,必须重新加载Apache2configuration:

 $ sudo /etc/init.d/apache2 reload 

在Ubuntu上,您可以select:

 $ sudo service apache2 reload