[英]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可能性。 因為您有三個字母( .
, g
, z
),所以有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.