Apache2和logrotate:是否需要delaycompress?


8

目前,我正在查看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
}

Answers:


7

如果您要重新启动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围绕它的块。


YMMV,但我觉得这是个不错的答案
asdmin 2010年

0

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

您可以尝试的一件事就是rotatelogs脚本。它是apache2-utils软件包的一部分,至少在我的Ubuntu工作站上。另一种方法是每天而不是每周轮换一次,因此压缩前的缓冲较少。


可能应该在上述问题中添加了我的logrotate配置-作为postrotate,我设置了apache2的重启。
j0nes
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.