我通常在下的域名文件夹中创建访问和错误日志/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 会为您轮换日志。