为什么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
,您将看到在使用以下命令删除其日志文件后,必须重新加载Apache2
configuration:
$ sudo /etc/init.d/apache2 reload
在Ubuntu上,您可以select:
$ sudo service apache2 reload