Logrotate 不刪除壓縮日誌
我有一個執行 rsyslog 和 logrotate 的 CentOS 機器作為我的系統日誌伺服器,用於一大堆網路設備。我已經玩了一段時間了,logrotate/compression 工作正常,但我似乎無法刪除舊的壓縮 .gz 日誌。這是基本設置:
日誌儲存在:/var/log/syslog 中,每個主機根據其 IP 地址或主機名創建一個新的子文件夾。我有兩個非常健談的特定主機,所以我有特定的規則讓它們在 5 GB 後截斷。這個想法是每天壓縮並啟動一個新日誌,並保留 60 天的日誌。
這是我的配置(其中大部分不是我創建的,但我已經維護和修改了其中的幾個):
貓 /etc/cron.hourly/logrotate
#!/bin/sh`enter code here` /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf EXITVALUE=$? if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" fi exit 0
貓 /etc/logrotate.d/syslog
/var/log/cron /var/log/maillog /var/log/messages /var/log/secure /var/log/spooler { compress daily #delaycompress dateext missingok rotate 60 maxage 60 sharedscripts postrotate /bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true endscript }
貓 /etc/logrotate.conf
/var/log/syslog/*/*.log { daily rotate 60 maxage 60 compress } daily rotate 60 create dateext compress include /etc/logrotate.d /var/log/wtmp { monthly create 0664 root utmp minsize 1M rotate 1 } /var/log/btmp { missingok monthly create 0600 root utmp rotate 1 } # system-specific logs may be also be configured here. # Specific rule for HOST_A /var/log/syslog/HOST_A/*.log { daily size 5G rotate 30 maxage 30 compress } # Specific rule for HOST_B /var/log/syslog/HOST_B/*.log { daily size 5G rotate 30 maxage 30 compress }
這是我的 \var\log\syslog\host_a 文件夾中的一個範例:
ls /var/log/syslog/HOST_A/ | wc -l
104
ls /var/log/syslog/HOST_A/ -lh
-rw------- 1 root root 416M Jun 20 23:59 HOST_A_2018_06_20.log.1.gz -rw------- 1 root root 64M Jun 20 16:18 HOST_A_2018_06_20.log.2.gz -rw------- 1 root root 1.5G Jun 21 23:59 HOST_A_2018_06_21.log.1.gz <many files redacted> -rw------- 1 root root 1.6G Sep 4 23:59 HOST_A_2018_09_04.log.1.gz -rw------- 1 root root 1.5G Sep 5 23:59 HOST_A_2018_09_05.log.1.gz -rw------- 1 root root 7.7G Sep 6 10:58 HOST_A_2018_09_06.log
因此,您可以在上面看到,它不會在 60 天后刪除舊的存檔 .gz 日誌。它無限期地保留它們。我不得不定期進入並手動刪除舊文件以減小大小。這些文件從 6/20 到 9/6(今天),即 104 天。我確定我配置錯誤,但不確定我缺少什麼。任何幫助,將不勝感激。
您正在為日常日誌文件使用兩種機制,並且它們彼此不合作。
一方面讓 syslog 生成每日文件,另一方面讓 logrotate 旋轉文件。Logrotate 會將每個每日文件視為一組單獨的唯一文件(它不認為 HOST_A_2018_09_05.log 與 HOST_A_2018_09_06.log 相關)進行輪換,因此每個模式永遠不會達到五個文件文件。
最好不要在文件名中包含日期,或者讓 syslog 自己修剪舊文件。