日誌的輪轉是一種日誌管理策略,可以簡化管理。
以/var/log/messages 日誌檔案為例:
先分四步講解下輪轉的過程。
1. 系統只有 messages 檔案,還沒有輪轉
touch messages
2. 第一次輪轉生成 messages.1
mv messages messages.1
touch messages
3. 第二次輪轉生成 messages.2
mv messages.1 messages.2
mv messages messages.1
touch messages
4. 第三次輪轉生成 messages.3
mv messages.2 messages.3
mv messages.1 messages.2
mv messages messages.1
toouch messages
這樣日誌達到一定條件就會這樣不斷生成新的檔案,可以看出,日誌的輪轉其本質就是舊檔案的移動和新檔案的建立。
———————————————————————-
日誌的輪轉其主配置檔案為/etc/logrotate.conf
[root@localhost ~]# cat /etc/logrotate.conf|grep -v ^# |grep -v ^$
weekly
rotate 4
create
include /etc/logrotate.d
/var/log/wtmp {
monthly
minsize 1M
create 0664 root utmp
rotate 1
}
全域性配置:
weekly :表示所有日誌每週進行一次輪轉
rotate 4 :表示所有日誌預設只保留一箇舊檔案
create :由於舊檔案被輪轉了,所以新建一個日誌檔案來儲存日誌
include /etc/logrotate.d :次配置檔案所在目錄
/var/log/wtmp 為區域性配置:
monthly :表示所有日誌每週進行一次輪轉
minsize 1M :輪轉日誌的最小大小
create 0664 root utmp :建立檔案時,指定許可權、屬主和屬組
rotate 1 :保留一箇舊檔案
這全域性配置和區域性配置就類似 C++中類的繼承。
———————————————————————-
自定義日誌輪轉:
自定義日誌輪轉前要了解下面幾個命令:
需要執行的外部命令放在 sharedscripts 和 endscript 兩行之間
prerotate : logrotate 命令執行前執行指令碼內容
postrotate:logrotate 命令執行後執行指令碼內容
———————————————————————-
下面説個例項:
配置/var/log/mytest.log 日誌檔案記錄所有日誌,並加上高階許可權 a;
echo “*.info/var/log/mytest.log”>>/etc/syslog.conf
/etc/init.d/syslog restart
chattr +a /var/log/mytest.log
輪轉配置
vim /etc/logrotate.d/mytest
/var/log/mytest.log{
mothly
size=10M
rotate 5
compress 壓縮儲存
sharedscripts
prerotate
/usr/bin/chattr -a /var/log/mytest.log
endscripts
sharedscripts
postrotate
/usr/bin/kill -HUP syslog 以 HUP 方式從新載入服務,相當於從新讀取配置檔案,不改變程序 id 號
/usr/bin/chattr +a /var/log/mytest.log
endscripts
}
最後可以用下這個命令:
# logrotate -v /etc/logrotate.conf
測試有沒有日誌需要輪轉-f 強制輪轉