Logrotate
Logrotate 未按預期工作
這是我的 logrotate 配置:
/var/log/glusterfs/*.log /var/log/glusterfs/bricks/*.log /var/log/glusterfs/bricks/*.log.* { sharedscripts daily rotate 3 copytruncate size 100M missingok compress delaycompress ifempty postrotate /usr/bin/killall -HUP glusterfs > /dev/null 2>&1 || true /usr/bin/killall -HUP glusterd > /dev/null 2>&1 || true endscript }
這是目錄:
username@server:/var/log/glusterfs/bricks$ ll total 405980 -rw------- 1 root root 0 Dec 23 00:05 be-data.log -rw------- 1 root root 1 Dec 29 09:38 be.log.1 -rw------- 1 root root 0 Dec 25 11:24 nl.log -rw------- 1 root root 0 Dec 29 09:49 nl.log.1.1 -rw------- 1 root root 0 Dec 29 09:50 nl.log.1.1.1 -rw------- 1 root root 0 Dec 29 09:55 nl.log.1.1.1.1 -rw------- 1 root root 0 Dec 29 09:55 nl.log.1.1.1.1.1 -rw------- 1 root root 0 Dec 29 09:55 nl.log.1.1.1.1.1.1 -rw------- 1 root root 0 Dec 29 09:55 nl.log.1.1.1.1.1.1.1 -rw------- 1 root root 0 Dec 29 09:55 nl.log.1.1.1.1.1.1.1.1 -rw------- 1 root root 0 Dec 29 10:08 nl.log.1.1.1.1.1.1.1.1.1 -rw------- 1 root root 0 Dec 29 10:08 nl.log.1.1.1.1.1.1.1.1.1.1 -rw------- 1 root root 0 Dec 29 10:08 nl.log.1.1.1.1.1.1.1.1.1.1.1 -rw------- 1 root root 368402432 Dec 29 10:08 nl.log.1.1.1.1.1.1.1.1.1.1.1.1 -rw------- 1 root root 610304 Dec 23 00:05 bo.log.1 -rw------- 1 root root 860160 Dec 23 00:05 bricks.log.1 -rw------- 1 root root 589824 Dec 23 00:05 other.log.1
我能看到的:
- 日誌未壓縮
- 日誌大於 100MB
- 計數不起作用
- 存在空日誌文件,我不想要輪換的空日誌文件
我的 logrotate 配置應該如何解決上述所有問題?
在配置文件中,您為
/var/log/glusterfs/bricks
目錄中的日誌文件指定了兩種模式:
*.log
*.log.*
這些模式中的第二個將匹配任何旋轉的日誌文件。這就是為什麼您會得到帶有看似無窮無盡的
.1
後綴的文件。日誌文件未壓縮,因為您
delaycompress
在配置中有。它們將在下一次旋轉時被壓縮。請注意,第一個問題(由於上述第二種模式而導致已旋轉日誌的旋轉)有效地禁用了任何壓縮,因為所有旋轉都是“第一次”旋轉。如果日誌文件大於 100M,則會根據您的配置進行輪換。有一個文件比這個大。由於上述第二個日誌文件模式存在上述問題,它在每次呼叫時都會被輪換並且從不壓縮。
有空的日誌文件。這只是上面錯誤的日誌文件匹配模式的另一個影響。當一個日誌文件被輪換時,它被複製到
name-of-file.log.1
並且原始文件name-of-file.log
被截斷(“清空”)。同樣,由於*.log.*
配置中的模式,文件將在下一次旋轉時name-of-file.log.1
被複製到,而原始文件將被截斷。name-of-file.log.1.1``name-of-file.log.1
一切正常,但是由於日誌文件模式不僅會拾取實際的日誌文件,還會拾取旋轉的日誌文件,因此您最終會遇到這種混亂。