为什么在我手动删除日志文件( 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