因此,我有许多 Apache 日志,我喜欢在开发人员框中使用 logrotate 进行处理。其中一些用于用户沙箱,其他用于暂存版本等。
logrotate 配置如下:
/srv/www/logs/beta/*log
/srv/www/logs/www/*log
/home/developerx/logs/*.log {
daily
rotate 100
olddir archive
sharedscripts
postrotate
/sbin/service httpd reload > /dev/null 2>/dev/null || true
endscript
}
我想针对 beta 版和沙盒自定义一些设置,比如针对沙盒旋转 10 次而不是 100 次。我可以为此创建一个新上下文,但如果我对多个上下文执行 postrotate“重新加载”,我担心该过程会被重新加载多次。
作为第二个问题,有什么方法可以确定 logrotate 处理这些条目的顺序吗?按文件名的字母顺序排列,还是在文件中从头到尾排列?
答案1
是的,如果你写一个单独的条目,并且它将有一个重新加载命令,则 http 服务器将重新加载两次。
我相信 logrotate 会应用您描述的规则。它包括 logrotate.d 目录中的文件,并逐个处理这些文件,从第一个条目到最后一个条目。我有一个基于此事实的 logrotate 监控:一组特别棘手的文件中的最后一条规则有一个 postrotate 脚本,它会回显date +%j
到状态文件。
logrotate -d -f /etc/logrotate.conf
您可以使用 -d 代表“调试”来检查以上所有内容。
不过,Apache 可以使用 rotatelogs 作为自定义记录器,和每个站点的 CustomLog 指令可能不同,因此您可以以不同的方式处理不同的日志并消除重新加载问题。