我目前正在查看 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 工作站上是这样的。另一种方法是每天轮换它们,而不是每周轮换,这样在压缩之前缓冲的时间就会减少。