centos-7.6系統默認安裝logrotate,默認的配置文件:
/etc/logrotate.conf
/etc/logrotate.d/
logrotate.conf:為主配置文件
logrotate.d:為配置相關子系統,用於隔離每個應用配置(Nginx、PHP、Tomcat...)
用於解決個別日志文件過大,不易清理及查看
以haproxy 為例
cat /etc/logrotate.d/haproxy
/var/log/haproxy/haproxy.log {
#文件絕對路徑,nginx日志亦同上
daily
#指定轉儲周期為每天
rotate 20
#保留20天的日志
missingok
#如果日志文件丟失,不進行顯示錯誤
notifempty
#當日志文件為空時,不進行轉儲
dateext
#加上日志格式
compress
#通過gzip壓縮轉儲后的日志
sharedscripts
#轉儲完成后運行腳本,postrotate-endscript間為腳本內容,腳本效果為重啟rsyslogd服務。
postrotate
systemctl restart rsyslog.service
endscript
}
測試配置文件
logrotate -d /etc/logrotate.d/haproxy
該服務由anacron調用
anacron默認配置如下
修改該服務的調用時間
cat /etc/anacrontab
# /etc/anacrontab: configuration file for anacron
# See anacron(8) and anacrontab(5) for details.
SHELL=/bin/sh
PATH=/sbin:/bin:/usr/sbin:/usr/bin
MAILTO=root
# the maximal random delay added to the base delay of the jobs
RANDOM_DELAY=45
# the jobs will be started during the following hours only
#默認為3點到22點隨機延遲45分鍾執行,修改為3點到5點
START_HOURS_RANGE=3-5
#period in days delay in minutes job-identifier command
1 5 cron.daily nice run-parts /etc/cron.daily
7 25 cron.weekly nice run-parts /etc/cron.weekly
@monthly 45 cron.monthly nice run-parts /etc/cron.monthly
效果如下
-rw------- 1 root root 3030916 Jul 1 03:48 haproxy.log-20190701.gz
-rw------- 1 root root 3870655 Jul 2 03:24 haproxy.log-20190702.gz
-rw------- 1 root root 4569410 Jul 3 03:39 haproxy.log-20190703.gz
-rw------- 1 root root 3715970 Jul 4 03:33 haproxy.log-20190704.gz
Logrotate中其他可配置參數,具體如下:
compress //通過gzip 壓縮轉儲以后的日志
nocompress //不做gzip壓縮處理
copytruncate //用於還在打開中的日志文件,把當前日志備份並截斷;是先拷貝再清空的方式,拷貝和清空之間有一個時間差,可能會丟失部分日志數據。
nocopytruncate //備份日志文件不過不截斷
create mode owner group //輪轉時指定創建新文件的屬性,如create 0777 nobody nobody
nocreate //不建立新的日志文件
delaycompress //和compress 一起使用時,轉儲的日志文件到下一次轉儲時才壓縮
nodelaycompress //覆蓋 delaycompress 選項,轉儲同時壓縮。
missingok //如果日志丟失,不報錯繼續滾動下一個日志
errors address //專儲時的錯誤信息發送到指定的Email 地址
ifempty //即使日志文件為空文件也做輪轉,這個是logrotate的缺省選項。
notifempty //當日志文件為空時,不進行輪轉
mail address //把轉儲的日志文件發送到指定的E-mail 地址
nomail //轉儲時不發送日志文件
olddir directory //轉儲后的日志文件放入指定的目錄,必須和當前日志文件在同一個文件系統
noolddir //轉儲后的日志文件和當前日志文件放在同一個目錄下
sharedscripts //運行postrotate腳本,作用是在所有日志都輪轉后統一執行一次腳本。如果沒有配置這個,那么每個日志輪轉后都會執行一次腳本
prerotate //在logrotate轉儲之前需要執行的指令,例如修改文件的屬性等動作;必須獨立成行
postrotate //在logrotate轉儲之后需要執行的指令,例如重新啟動 (kill -HUP) 某個服務!必須獨立成行
daily //指定轉儲周期為每天
weekly //指定轉儲周期為每周
monthly //指定轉儲周期為每月
rotate count //指定日志文件刪除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份
dateext //使用當期日期作為命名格式
dateformat .%s //配合dateext使用,緊跟在下一行出現,定義文件切割后的文件名,必須配合dateext使用,只支持 %Y %m %d %s 這四個參數
size(或minsize) log-size //當日志文件到達指定的大小時才轉儲,log-size能指定bytes(缺省)及KB (sizek)或MB(sizem).
當日志文件 >= log-size 的時候就轉儲。 以下為合法格式:(其他格式的單位大小寫沒有試過)
size = 5 或 size 5 (>= 5 個字節就轉儲)
size = 100k 或 size 100k
size = 100M 或 size 100M
