Logrotate httpd(apache)日志-清除日志后无需重新加载httpd可以吗?

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 重新加载)时会有 2-5 秒的停机时间(通过我们的 nginx 反向代理日志注意到)。

我们想禁用此功能。

有什么想法可以旋转 Apache 日志而不在旋转后发送重新加载?

谢谢!

答案1

您可以使用 Apache 的管道日志。您可以自己编写管道流到文件并在脚本内部处理旋转。这样就不需要重新加载 Apache。

答案2

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

就像 Christopher Perrin 所说的那样,使用管道日志是一种解决方案。另一种方法是使用选项

copytruncate

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

相关内容