參考man logrotate(8)
介紹
logrotate是linux用來控制log檔案數量`大小`存放地點和檔案名稱.logrotate不是一個daemon,他是靠cron每天執行的,可以參考下面設定檔順序
版本
Red Hat 4.4.7-17
logrotate-3.7.8-26.el6_7.x86_64
目的
把syslog檔案用年和月資料夾分開.logrotate configation
預設log設定檔案/etc/logrotate.conf
# see "man logrotate" for details
# rotate log files weekly
weekly
# keep 4 weeks worth of backlogs
rotate 4
# 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
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
# no packages own wtmp and btmp -- we'll rotate them here
/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.
其他還有daily, monthly, or yearly
rotate:rotate的次數
create:將會創造新的空白檔案放入新的log.
dateext:設定log檔名稱是YYYYMMDD.
另一個dateformat format_string 可以自訂格式.
#compress:ZIP壓縮檔案
include /etc/logrotate.d:指定後面要執行的logrotate
其他還有像minsize size 可以指定要被log檔案必須至少多少size,等等....
logrotate.conf是所有logrotate檔預設設定,在logrotate.conf定義後所有的logrotate檔都會執行,但如果個別的logrotate檔有定義參數,將使用個別的logrotate檔的設定.
個別log檔案設定
/etc/logrotate.d/syslog
/var/log/cron
/var/log/maillog
/var/log/messages
/var/log/secure
/var/log/spooler
{
daily
olddir /var/log/syslog
dateext
rotate 4
firstaction
/bin/mkdir -p /var/log/syslog
endscript
lastaction
/bin/mkdir -p /var/log/syslog/$(/bin/date '+%Y')/$(/bin/date '+%m');
cd /var/log/syslog;
/bin/cp $(/bin/ls /var/log/syslog|/bin/grep $(/bin/date '+%Y%m%d')) /var/log/syslog/$(/bin/date '+%Y')/$(/bin/date '+%m');
cd -;
endscript
postrotate
/bin/kill -HUP `cat /var/run/syslogd.pid 2> /dev/null` 2> /dev/null || true
endscript
}
因為後面只想要驗證syslog的關係,所以也把預設有設定的東西也放在這裡.
以下參數跟endscript之間可以寫類似script的內容
firstaction:執行時間是執行所有log之前
lastaction:執行時間是執行所有log之後
prerotate:執行時間是執行單個log之前
postrotate:執行時間是執行單個log之後
注意:無法使用萬用字元,如果有更輕鬆的用法請告訴我
1./bin/mkdir -p /var/log/syslog 創一個專屬的資料夾
2.olddir /var/log/syslog 指定log檔的資料夾
3./bin/mkdir -p /var/log/syslog/$(/bin/date '+%Y')/$(/bin/date '+%m'); 創日期資料夾
4./bin/cp $(/bin/ls /var/log/syslog|/bin/grep $(/bin/date '+%Y%m%d')) /var/log/syslog/$(/bin/date '+%Y')/$(/bin/date '+%m'); copy已rotate的檔案過去
以下參數跟endscript之間可以寫類似script的內容
firstaction:執行時間是執行所有log之前
lastaction:執行時間是執行所有log之後
prerotate:執行時間是執行單個log之前
postrotate:執行時間是執行單個log之後
注意:無法使用萬用字元,如果有更輕鬆的用法請告訴我
1./bin/mkdir -p /var/log/syslog 創一個專屬的資料夾
2.olddir /var/log/syslog 指定log檔的資料夾
3./bin/mkdir -p /var/log/syslog/$(/bin/date '+%Y')/$(/bin/date '+%m'); 創日期資料夾
4./bin/cp $(/bin/ls /var/log/syslog|/bin/grep $(/bin/date '+%Y%m%d')) /var/log/syslog/$(/bin/date '+%Y')/$(/bin/date '+%m'); copy已rotate的檔案過去
驗證
驗證要執行 logrotate -v /etc/logrotate.d/syslog,因為不知道logrotate的流程,我只要rotate一次他就不會再產生資料,就算我加入參數-v或刪掉/var/lib/logrotate.status裡面的資料也是一樣,這就會只要rotate錯一次就要等至少一天,我不太想這樣,所以只好用虛擬機的快照還原去測試.可以看到原本/var/log/syslog沒有東西,執行完logrotate /etc/logrotate.d/syslog 後/var/log/syslog裡面就會出現東西,因為我是copy所以/var/log/syslog裡的log檔案可以保留最多四個,但是/var/log/syslog/2016/08裡的log檔案就不會被刪掉.
沒有留言:
張貼留言