Logrotate httpd (apache) 日志 - 可能在日志清除后不重新加载 httpd 吗?

ano*_*one 0 logrotate apache-2.2

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

/var/log/httpd/*log {
    compress
    missingok
    notifempty
    sharedscripts
    delaycompress
    postrotate
        /sbin/service httpd reload > /dev/null 2>/dev/null || true
    endscript
}
Run Code Online (Sandbox Code Playgroud)

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

如您所见,在文件轮换后,apache 被“重新加载”。

禁用这个可以吗?

我们反向代理(通过 nginx)到我们的 apache 盒子,并注意到当它被执行(httpd 重新加载)有 2-5 秒的停机时间(通过我们的 nginx 反向代理日志注意到)。

我们想禁用它。

任何想法如何在轮换后不发送重新加载的情况下轮换 apache 日志?

谢谢!

Chr*_*rin 5

您可以使用 Apache 的管道日志。您可以自己将管道流写入文件并处理脚本内的旋转。Apache 不需要重新加载。


Jen*_*y D 5

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

正如 Christopher Perrin 所说,使用管道日志是一种解决方案。另一种是使用选项

copytruncate
Run Code Online (Sandbox Code Playgroud)

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