Centos

logrotate 不尊重旋轉參數

  • December 3, 2015

我在使用 logrotate 時遇到了一些麻煩,它似乎並沒有按照我的意思去做。

環境:

  • 美分6.4
  • 登錄旋轉 3.7.8

我的 /etc/logrotate.conf 文件有以下內容:

# rotate log files weekly
daily

# keep 4 weeks worth of backlogs
rotate 30

# create new (empty) log files after rotating old ones
create

# use date as a suffix of the rotated file
# dateext

# uncomment this if you want your log files compressed
compress
compresscmd /usr/bin/bzip2
uncompresscmd /usr/bin/bunzip2
compressext .bz2

# RPM packages drop log rotation information into this directory
include /etc/logrotate.d

我遇到問題的logrotate文件是這個(對於elasticsearch,位於/etc/logrotate.d/elasticsearch):

/var/log/elasticsearch/*.log {
   missingok
   notifempty
   copytruncate
   postrotate
       rm -rf /var/log/elasticsearch/*.log.$(date +%Y)*
   size 1k
   rotate 7
   daily
}

首先,它不尊重我的rotate 7配置,當我執行時logrotate -d /etc/logrotate.conf,我得到一條線說:

旋轉日誌 /var/log/elasticsearch/gravity-es-prod02.log,log->rotateCount 為 30

…還有一堆聲明說它正在旋轉 30 個不同的 *.bz2 文件。

gravity-es-prod02.log.2015-12-01其次,儘管沒有啟用 dateext,但我仍然得到一個名為(以及自上次手動清理以來的任何以前的日期)的日誌文件。這些也沒有得到清理,所以我添加了 postrotate 行來手動清理它,但顯然這也不能正常工作。

編輯 執行 logrotate 腳本的 cron 文件非常標準:

#> cat /etc/cron.daily/logrotate 
#!/bin/sh

/usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1
EXITVALUE=$?
if [ $EXITVALUE != 0 ]; then
   /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]"
fi
exit 0

我在您提供的腳本中發現了一個錯誤(缺少 endscript):

postrotate
   rm -rf /var/log/elasticsearch/*.log.$(date +%Y)*
endscript

我相信這部分失敗了,並且以某種方式為此日誌模式應用了全域設置。

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