如果 logrotate 配置中指定了“size”和“daily”参数,哪个参数优先?这在哪里有记录?我希望这些轮换以布尔或运算的形式发生,即,如果日志是一天前的,它们会被轮换,或者如果日志大于某个大小,它们也会被轮换。但是,logrotate 目前只使用“size”指令,似乎忽略了“daily”指令。Logrotate 设置为每小时运行一次。操作系统是 Linux、Red Hat 和 Debian 衍生产品。
另外,我在文件开头首先指定了“daily”,然后指定了“size”。不确定顺序是否重要,但无论如何,配置文件中必须有一个排在最前面...
谢谢!
答案1
如果尺寸使用指令时,logrotate 将忽略日常的,每周,每月, 和每年指令。执行命令时,文档中没有明确这一点man logrotate
。但是,实践中可以证实这一点,并且在一些随意的博客文章中提到比如这个。
有一条指令叫做最小尺寸根据 logrotate 手册页,这是唯一可以与时间指令结合使用的大小指令。但是,这仍然不是您想要的。使用最小尺寸和日常的本质上说:每天轮换日志,但只有当日志大小至少为 #MB 时才轮换。
到目前为止,我还没有找到使用 logrotate 来满足您要求的方法:每天轮换,除非大小超过 #MB,在这种情况下立即轮换。我不认为仅使用 logrotate 指令就可以实现这一点。也许可以通过脚本钩子指令等巧妙的脚本来实现预旋转,后旋转,首次行动, 和最后行动。
更新:
从 logrotate 3.8.1 开始,maxsize
和timeperiod
同时受支持,这将是理想的解决方案。请参阅此帖子的答案:除非日志超过一定大小,否则如何根据间隔轮换日志?
答案2
根据我使用 logrotate 的经验,@egg 的第一个回答是不正确的!
如果每日、每月……来第一的在那之后尺寸指示,每日、每月……将被忽略,尺寸指令将应用于日志文件。
同样,当我第一次使用尺寸然后指令每日、每周、每月和每年指令,尺寸指令将被忽略。
答案3
如果添加每日,即使满足大小条件,它也会每天轮换。如果还添加大小条件,则一天内可能会轮换两次,具体取决于日志记录的详细程度。
如果脚本中 Daily 先运行,则 Size 可能不会触发。
答案4
实际上,我的 Red Hat 手册页似乎非常清楚地说明了 size 和 minsize 之间的区别:
最小尺寸
Log files are rotated when they grow bigger then size bytes, but not before the additionally specified time interval (daily, weekly, monthly, or yearly). The related size option is similar except that it is mutually exclusive with the time interval options, and it causes log files to be rotated with- out regard for the last rotation time. When minsize is used, both the size and timestamp of a log file are considered.