我正在使用logrotate
版本3.12.3。如何告诉logrotate
排除已经旋转/压缩的文件?
例如,如果我将/var/log
中的所有文件旋转为
"/var/log/*" {
compress
missingok
dateext
rotate 4
size=5000k
}
文件压缩后,如何告诉logrotate
不要旋转已旋转/压缩的文件?例如:
/var/log/file1
对数旋转后变为
/var/log/file1.20211212.gz
我尝试过
tabooext + .gz
在定义之上,但似乎没有生效。
来自man logrotate
包括file_or_directory
读取作为自变量给出的文件,就好像该文件被内联包含在include指令出现的位置一样。如果给出了目录, 该文件中的大多数文件 在继续处理包含文件之前,将按字母顺序读取目录。唯一被忽略的文件是 非常规文件 文件(例如目录和命名管道)以及文件名以禁忌扩展名之一结尾的文件(如 tabooext指令。
如果像下面这样工作,那就太好了。
/var/log/*[!".gz"] {
}
谢谢。
EDIT
也许做类似
/var/log/*[!.][!g][!z] {
..
}
,但会跳过名为/var/log/test1gz
的文件。如何将.
字符与通配符匹配?
答案 0 :(得分:1)
您不需要指定完整的文件夹。您也可以定义一个文件。因此,首先应该为您拥有更好概述的每个服务创建子文件夹。您可以在其中放置日志。您不应将其放在完整的日志文件夹中,因为还可以找到更多的旋转脚本。
例如:
/var/log/yum.log {
missingok
notifempty
size 30k
yearly
create 0600 root root
}
答案 1 :(得分:0)
尝试查找所有不接受*.gz
的全局可能性。由于您有3个字母(.
,g
,z
),因此有2^3 = 8
个可能的组合(3个字符,2个状态x
和{{1} }),减去!x
。
其他七种可能性如下:
所有没有扩展名倒数第三但以*.gz
结尾的文件(例如gz
)
filegz
所有2个字母扩展名的文件不是以/var/log/*[!.]gz
开头,而是以g
结尾(例如z
)
file.7z
所有2个字母扩展名以/var/log/*.[!g]z
开始但不以g
结尾的文件(例如z
)
file.gg
所有不以/var/log/*.g[!z]
结尾但以.gz
结尾的文件(例如z
)
file.ezz
所有不以/var/log/*[!.][!g]z
结尾但以.gz
作为倒数第二个字母(例如g
)的文件
file.cgi
所有2个字母的扩展名不是/var/log/*[!.]g[!z]
的文件(例如gz
)
file.hh
最后,所有未以/var/log/*.[!g][!z]
结尾的文件(例如.gz
)
file.txt
所以这给了我们
/var/log/*[!.][!g][!z]
可以使用python生成组合:
/var/log/*[!.]gz
/var/log/*.[!g]z
/var/log/*.g[!z]
/var/log/*[!.][!g]z
/var/log/*[!.]g[!z]
/var/log/*.[!g][!z]
/var/log/*[!.][!g][!z]
{
...
希望有帮助!