如何在logrotate中排除“ .gz”文件

时间:2018-08-13 06:35:21

标签: linux gzip logrotate

我正在使用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的文件。如何将.字符与通配符匹配?

2 个答案:

答案 0 :(得分:1)

您不需要指定完整的文件夹。您也可以定义一个文件。因此,首先应该为您拥有更好概述的每个服务创建子文件夹。您可以在其中放置日志。您不应将其放在完整的日志文件夹中,因为还可以找到更多的旋转脚本。

例如:

/var/log/yum.log {
    missingok
    notifempty
    size 30k
    yearly
    create 0600 root root
}

答案 1 :(得分:0)

尝试查找所有不接受*.gz的全局可能性。由于您有3个字母(.gz),因此有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]
{
  ...

希望有帮助!