Apache 在已轮换的日志文件中记录访问

Apache 在已轮换的日志文件中记录访问

我通常在下的域名文件夹中创建访问和错误日​​志/var/log,并且使用此配置通过 logrotate 轮换这些文件:

/var/log/mydomain.org/access.log
{
  weekly
  missingok
  rotate 52
  compress
  delaycompress
  notifempty
  create 640 root adm
  sharedscripts
  prerotate
      /usr/local/awstats/wwwroot/cgi-bin/awstats.pl -update -config=mydomain.org &> /dev/null
  endscript
  postrotate
      if [ -f /var/run/apache2.pid ]; then
          /etc/init.d/apache2 restart > /dev/null
      fi
  endscript
}

我经常遇到这个问题:我的access.log已旋转到access.log.1,但 apache2 继续记录访问access.log.1

我不知道为什么会发生这种情况。有什么帮助吗?

提前致谢。

答案1

我猜你的 apache 进程没有将 pid 文件放入“/var/run/apache2.pid”,因此你的 postrotate 永远不会执行。在进行故障排除时(如 faker 的评论所建议),也许可以尝试以下方法:

...
postrotate
/etc/init.d/apache2 restart > /tmp/apache_restart.txt
endscript
}

然后明天查看 /tmp/apache_restart.txtmore /tmp/apache_restart.txt

答案2

既然您可以通过一个简单的指令完成所有操作,为什么要使用 logrotate 来轮换 apache 日志?

您可以使用类似如下的方法:

ErrorLog "|/usr/sbin/rotatelogs /var/logs/httpd/error_log 86400"

这样,您就不需要处理文件上的锁,apache 会为您轮换日志。

相关内容