簡體   English   中英

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

[英]How to exclude “.gz” files in 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

讀取作為參數給出的文件,就好像該文件包含在內聯包含指令出現的位置。 如果給出了目錄,則在繼續處理包含文件之前,將按字母順序讀取該目錄中的大多數文件。 唯一被忽略的文件是非常規文件(例如目錄和命名管道)以及名稱以tabooext指令指定的忌諱擴展名之一結尾的文件。

如果像下面這樣工作,那就太好了。

/var/log/*[!".gz"] {
}

謝謝。

編輯

也許做類似的事情

/var/log/*[!.][!g][!z] {
..
}

但它會跳過名為/var/log/test1gz 我該如何搭配. 性格與球?

您無需指定完整的文件夾。 您也可以定義一個文件。 因此,首先應該為您擁有更好概述的每個服務創建子文件夾。 您可以在其中放置日志。 您不應將其放在完整的日志文件夾中,因為還可以找到更多的旋轉腳本。

例如:

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

嘗試查找所有不接受*.gz glob可能性。 因為您有三個字母( .gz ),所以有2^3 = 8可能的組合(3個字符,2個狀態x!x ),減去一個*.gz

其他七種可能性如下:

  • 所有沒有擴展名倒數第三但以gz結尾的文件(例如filegz

     /var/log/*[!.]gz 
  • 所有2字母擴展名的文件都不是以g開頭,而是以z結尾(例如file.7z

     /var/log/*.[!g]z 
  • 所有2字母擴展名的文件file.gg g開頭但不以z結尾(例如file.gg

     /var/log/*.g[!z] 
  • 所有不以.gz結尾但以z結尾的文件(例如file.ezz

     /var/log/*[!.][!g]z 
  • 所有不以.gz結尾但以g為倒數第二個字母的文件(例如file.cgi

     /var/log/*[!.]g[!z] 
  • 所有2字母擴展名不是gz (例如file.hh

     /var/log/*.[!g][!z] 
  • 最后,所有未以.gz (例如file.txt

     /var/log/*[!.][!g][!z] 

因此,這給了我們:

/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]
{
  ...

可以使用python生成組合:

import itertools as it

suffix = '.gz'
states = ([x, '![%c]' % x] for x in suffix)
for res in it.product(*states):
    print ''.join(res)

希望能幫助到你!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM