让我们从一个小垃圾场开始:
/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 可以保留相同的文件句柄,而不需要重新启动。