logrotate 的 sharedscripts 设置是否适用于所有已处理的日志,还是仅适用于当前上下文中的日志?

logrotate 的 sharedscripts 设置是否适用于所有已处理的日志,还是仅适用于当前上下文中的日志?

因此,我有许多 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 指令可能不同,因此您可以以不同的方式处理不同的日志并消除重新加载问题。

相关内容