![如果在 logrotate 中定义了大小参数,ifempty 和 notifempty 如何工作?](https://linux22.com/image/200605/%E5%A6%82%E6%9E%9C%E5%9C%A8%20logrotate%20%E4%B8%AD%E5%AE%9A%E4%B9%89%E4%BA%86%E5%A4%A7%E5%B0%8F%E5%8F%82%E6%95%B0%EF%BC%8Cifempty%20%E5%92%8C%20notifempty%20%E5%A6%82%E4%BD%95%E5%B7%A5%E4%BD%9C%EF%BC%9F.png)
假设我有一个像这样的 logrotate 命令
/a/b/file.log{
size 5M
ifempty
}
现在,logrotate 的工作条件是大小应大于 5MB,然后 logrotate 将开始处理该文件。但在这种情况下 ifempty 将如何工作呢?在这种情况下,优先顺序是什么?那么 notifempty 的情况又如何呢?
答案1
在此设置中:
size 5M
指示logrotate
仅在日志文件大于 5MB 时轮换日志文件;ifempty
即使日志文件为空也会发出指示logrotate
(默认情况下启用)。
这些指令可能会出现冲突:第一个指令将排除 0 字节文件,但第二个指令将包含 0 字节文件。
实际情况是,这ifempty
对文件选择没有明确的影响;重要的“空”设置与其相反,notifempty
如果日志文件为空,则在所有情况下都会禁用旋转。ifempty
存在,以便在notifempty
全局设置时可以恢复特定配置的默认行为。
考虑此问题的另一种方法是ifempty
/notifempty
不选择文件,它们仅确定在应用所有其他条件后考虑轮换空日志文件时会发生什么。如果ifempty
设置(同样,这是默认设置),则轮换空日志文件;如果notifempty
已设置,则未设置。
根据您的配置,只有日志文件大于 5MB 时才会轮换。