Apache2 和 logrotate:需要 delaycompress 吗?

Apache2 和 logrotate:需要 delaycompress 吗?

我目前正在查看 Apache 日志文件的大小,因为它们变得非常大。在我的 logrotate 配置中,我已delaycompress启用。Apache 真的需要这个吗(因为 logrotate 文档说有些程序仍在旧文件中写入)还是可以安全地禁用它delaycompress

这是我的 logrotate 配置:

/var/log/apache2/*.log {
    weekly
    missingok
    rotate 26 
    compress
    delaycompress
    notifempty
    create 640 root adm
    sharedscripts
    postrotate
            if [ -f /var/run/apache2.pid ]; then
                    /etc/init.d/apache2 restart > /dev/null
            fi
    endscript
}

答案1

如果您正在执行 Apache 重启(甚至是“优雅重启”),它将关闭打开的文件句柄并再次打开它们。您不需要 delaycompress,因为该文件将作为 postrotate 重启的一部分被关闭并重新打开。

rotate access_log -> access_log.1 (rename action, no INODE change)
apache still writing to access_log.1 (same open FD on same INODE)
apache restart (close FD, release INODE writing)
apache writing to access_log (new FD to a new INODE)

重新启动是个坏主意 - 如果配置文件意外更改并且不再有效怎么办?您的 Apache 将无法重新启动。相反,向父进程发送 HUP,告诉它关闭/重新打开文件句柄。

postrotate
  /bin/kill -HUP `cat /var/run/apache2.pid 2>/dev/null` 2>/dev/null || true
endscript

如果 PID 缺失(或为空或无效),cat 将失败,从而导致 kill 也失败,因此您不需要if..then对其进行阻止。

答案2

嗯,在这种情况下,可能是这样,因为 Apache 保持日志保持打开状态。

您可以尝试使用rotatelogs脚本。它是软件包的一部分apache2-utils,至少在我的 Ubuntu 工作站上是这样的。另一种方法是每天轮换它们,而不是每周轮换,这样在压缩之前缓冲的时间就会减少。

相关内容