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


9

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

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

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

我在Ubuntu 10.04上有Apache 2.2.14。


您如何删除内容?
Dom 2012年

@Dom我只是用vim打开它,做“ dG”(删除所有内容),然后用“!wq”保存。所有权/组/权限不变。
AtomicFault 2012年

3
@AtomicFault可能是因为这不是您应该旋转Apache日志的方式。您应该使用类似的logrotate方法向Apache发送适当的重装/重启信号(请参见下面的Pedro回答)。Nickgrim讲述了日志停止运行的“原因”-Apache仍在写入旧的inode(不再连接到您可以访问的任何文件系统)
voretaq7

Answers:


14

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

$ 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
echo> /path/to/file.log也可以使用

8

我建议通过以下方式强制旋转Apache2日志文件

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

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

$ sudo /etc/init.d/apache2 reload

在Ubuntu上,您也可以执行以下操作:

$ sudo service apache2 reload
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.