背景 在生產過程中,由於磁碟空間、保留周期等因素,會對系統、應用等日誌提出要求,要求系統日誌定期進行輪轉、壓縮和刪除,從而減少開銷,而系統自帶的logrotate 則是一個簡單又實用的小工具,下麵著重介紹一下,滿足日常需求。 語法 Usage: logrotate [OPTION...] <conf ...
背景
在生產過程中,由於磁碟空間、保留周期等因素,會對系統、應用等日誌提出要求,要求系統日誌定期進行輪轉、壓縮和刪除,從而減少開銷,而系統自帶的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
配置文件demo及參數
以下是我個人一個配置文件,可以直接拿來結合自己需求進行修改:
/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
格式設定執行時間,以便更好的分配腳本執行時間,避免機器資源集中使用,減少機器負載。