Logrotate

Logrotate 未按預期工作

  • December 29, 2016

這是我的 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目錄中的日誌文件指定了兩種模式:

  1. *.log
  2. *.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

一切正常,但是由於日誌文件模式不僅會拾取實際的日誌文件,還會拾取旋轉的日誌文件,因此您最終會遇到這種混亂。

引用自:https://unix.stackexchange.com/questions/333494