Logrotate httpd(apache)日志 – 日志清除后可能没有重新加载httpd?

让我们从一个小转储开始:

/var/log/httpd/*log { compress missingok notifempty sharedscripts delaycompress postrotate /sbin/service httpd reload > /dev/null 2>/dev/null || true endscript } 

这是我们的httpd logrotate.d文件的转储。

正如你所看到的,文件旋转后,apache被“重新加载”。

可以禁用这个吗?

我们将代理(通过nginx)转换到我们的apache盒子,并且注意到当这个被执行(httpd reload)时,有2-5秒的停机时间(通过我们的nginx反向代理日志注意到)。

我们想禁用这个。

任何想法如何旋转apache日志,而不会发送一个重新加载后,他们已经被旋转?

谢谢!

你可以使用Apache的pipe道日志 。 您可以编写pipe道stream以自行存档并处理脚本中的旋转。 Apache不需要重新加载。

重新加载的原因是,Apache打开日志文件并在启动或重新加载时获取它的句柄。 然后,即使文件被移动,它也将继续写入该文件句柄,所以如果通过移动文件来旋转文件,则需要重新加载,以便实现文件丢失,并创build一个新文件文件句柄。

像克里斯托弗·佩林说,使用pipe道日志是一个解决scheme。 另一个是使用该选项

 copytruncate 

在你的logrotateconfiguration文件中。 日志文件不会被移动,而是被复制到新的位置,旧的文件将被截断。 这意味着Apache可以保持相同的文件句柄,并且不需要重新启动。