在生產過程中,由於磁碟空間、保留週期等因素,會對系統、應用等紀錄檔提出要求,要求系統紀錄檔定期進行輪轉、壓縮和刪除,從而減少開銷,而系統自帶的logrotate
則是一個簡單又實用的小工具,下面著重介紹一下,滿足日常需求。
Usage: logrotate [OPTION...] <configfile>
常用引數 :
-f
非設定週期內強制執行
-d
偵錯,對紀錄檔模擬進行操作
-v
視覺化執行過程結果
其它引數不常用,詳情見下:
[root@test01 ~]# logrotate --help
Usage: logrotate [OPTION...] <configfile>
-d, --debug Don't do anything, just test (implies -v)
-f, --force Force file rotation
-m, --mail=command Command to send mail (instead of `/bin/mail')
-s, --state=statefile Path of state file
-v, --verbose Display messages during rotation
-l, --log=STRING Log file
--version Display version information
Help options:
-?, --help Show this help message
--usage Display brief usage message
[root@test01 ~]#
logrotate 設定主要有兩個
/etc/logrotate.conf
不建議對其修改/etc/logrotate.d
這裡存放使用者自定義檔案,通常建議將個人檔案放到這裡[root@test01 ~]# cd /etc/logrotate.d/
[root@test01 logrotate.d]# ll
total 16
-rw-r--r--. 1 root root 91 Aug 6 2019 bootlog
-rw-r--r--. 1 root root 224 Aug 6 2019 syslog
-rw-r--r--. 1 root root 100 Oct 31 2018 wpa_supplicant
-rw-r--r--. 1 root root 103 Aug 8 2019 yum
[root@test01 logrotate.d]#
為保證 /etc/logrotate.d
定義的檔案能夠執行生效,需要確保 /etc/logrotate.conf
這句話沒有註釋,如有註釋,需手動取消:
# RPM packages drop log rotation information into this directory
include /etc/logrotate.d
以下是我個人一個組態檔,可以直接拿來結合自己需求進行修改:
/var/log/linuxserver/linux.log {
rotate 7
size 200M
daily
compress
delaycompress
missingok
notifempty
noolddir
copytruncate
dateext
dateformat .%s
create 660 root root
}
檔案格式主要是以紀錄檔路徑和紀錄檔切割引陣列成:
第一行:指明 需要進行切割的紀錄檔路徑,可以結合正規表示式,例如 /path/*.log
,指定路徑下所有的紀錄檔
第二行:以{ }
包含logrotate
所需要的引數,demo包含了基本常用到的幾個引數,此外還有如下部分引數,引數含義如下:
# 紀錄檔壓縮引數
compress 通過gzip 壓縮轉儲以後的紀錄檔
delaycompress 和compress 一起使用時,轉儲的紀錄檔檔案到下一次轉儲時才壓縮
nodelaycompress 覆蓋 delaycompress 選項,轉儲同時壓縮
nocompress 不做gzip壓縮處理
# 對截斷後的紀錄檔處理引數
copytruncate 用於還在開啟中的紀錄檔檔案,把當前紀錄檔備份並截斷;是先拷貝再清空的方式,拷貝和清空之間有一個時間差,可能會丟失部分紀錄檔資料。
nocopytruncate 備份紀錄檔檔案不過不截斷
create mode owner group 輪轉時指定建立新檔案的屬性,如create 0777 nobody nobody
nocreate 不建立新的紀錄檔檔案
dateext 使用當期日期作為命名格式
dateformat .%s 配合dateext使用,緊跟在下一行出現,定義檔案切割後的檔名,必須配合dateext使用,只支援 %Y %m %d %s 這四個引數
# 基本引數
missingok 如果紀錄檔丟失,不報錯繼續捲動下一個紀錄檔
errors address 專儲時的錯誤資訊傳送到指定的Email 地址
ifempty 即使紀錄檔檔案為空檔案也做輪轉,這個是logrotate的預設選項。
notifempty 當紀錄檔檔案為空時,不進行輪轉
mail address 把轉儲的紀錄檔檔案傳送到指定的E-mail 地址
nomail 轉儲時不傳送紀錄檔檔案
# 舊紀錄檔存放引數
olddir directory 轉儲後的紀錄檔檔案放入指定的目錄,必須和當前紀錄檔檔案在同一個檔案系統
noolddir 轉儲後的紀錄檔檔案和當前紀錄檔檔案放在同一個目錄下
# logrotate 執行前後勾點引數
sharedscripts 執行postrotate指令碼,作用是在所有紀錄檔都輪轉後統一執行一次指令碼。如果沒有設定這個,那麼每個紀錄檔輪轉後都會執行一次指令碼
prerotate 在logrotate轉儲之前需要執行的指令,例如修改檔案的屬性等動作;必須獨立成行
postrotate 在logrotate轉儲之後需要執行的指令,例如重新啟動 (kill -HUP) 某個服務!必須獨立成行
# 執行週期引數
daily 指定轉儲週期為每天
weekly 指定轉儲週期為每週
monthly 指定轉儲週期為每月
# logrotate 觸發條件引數
rotate count 指定紀錄檔檔案刪除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份
size(或minsize) log-size 當紀錄檔檔案到達指定的大小M、G時才轉儲
logrotate
預設走的是crond
服務 ,執行語句指令碼存放在/etc/cron.daily/
目錄下,主要指令碼:/usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf
預設觸發時間組態檔存在 /etc/anacrontab
,預設執行時間 每日3.45-22.45 時間段隨機執行一次。缺點是具體執行時間不容易掌握,通常不建議使用者對該檔案進行修改,如果需要定期執行,建議使用者可以在vim /etc/crontab
或 crontab -e
按照crond
格式設定執行時間,以便更好的分配指令碼執行時間,避免機器資源集中使用,減少機器負載。