一、logrotate介紹
logrotate軟件是一個日志管理工具,用於非分隔日志,刪除舊的日志文件,並創建新的日志文件,起到“轉儲作用”,可以為系統節省磁盤空間。一般centos系統已經自帶安裝好了。
logrotate是基於crontab運行的,其腳本是/etc/cron.daily/logtotate,日志輪轉是系統自發完成的,實際運行時,logrotate會調用配置文件/etc/logrotate.conf。可以在/etc/logrotate.d目錄里放置自定義好的配置文件,用來覆蓋logrotate.conf的缺省值。
二、logrotate配置文件
2.1 logrotate默認配置文件
[root@linux-node1 ~]# grep -v '^#' /etc/logrotate.conf weekly #默認每周執行一次日志輪詢 rotate 4 #默認保留4個日志文件 create #自動創建新的日志文件,新的文件和原來的文件具有相同的權限 dateext #日志切割后,文件以當前日志為結尾,例如:messages-20181125 include /etc/logrotate.d #將/etc/logrotate.d目錄中的配置文件加載進來 /var/log/wtmp { #針對wtmp日志的配置參數 monthly #每月切割一次 create 0664 root utmp #新建日志的權限為0644,屬主為root,屬組為utmp minsize 1M #文件大小超過1M后才會切割 rotate 1 #只保留1個日志文件 } /var/log/btmp { missingok monthly create 0600 root utmp rotate 1 }
2.2 logrotate常用參數
配置參數 功能說明 compress #通過gzip,壓縮轉儲以后的日志 nocompress #不需要壓縮時,用這個參數 copytruncate #用於還在打開中的日志文件,把當前日志備份並截斷 nocopytruncate #備份日志文件但是不截斷 create mode owner group #轉儲文件,使用指定的文件模式創建新的日志文件 nocreate #不建立新的日志文件 delaycompress 和 compress #一起使用時,轉儲的日志文件到下一次轉儲時才壓縮 nodelaycompress #覆蓋delaycompress 選項,轉儲同時壓縮。 errors address #專儲時的錯誤信息發送到指定的Email 地址 ifempty #即使是空文件也轉儲,這個是 logrotate 的缺省選項。 notifempty #如果是空文件的話,不轉儲 mail address #把轉儲的日志文件發送到指定的E-mail 地址 nomail #轉儲時不發送日志文件 olddir directory #轉儲后的日志文件放入指定的目錄,必須和當前日志文件在同一個文件系統 noolddir #轉儲后的日志文件和當前日志文件放在同一個目錄下 prerotate/endscript #在轉儲以前需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行 postrotate/endscript #在轉儲以后需要執行的命令可以放入這個對,這兩個關鍵字必須單獨成行 daily #指定轉儲周期為每天 weekly #指定轉儲周期為每周 monthly #指定轉儲周期為每月 rotate count #指定日志文件刪除之前轉儲的次數,0 指沒有備份,5 指保留5 個備份 size(或minsize) #size當日志文件到達指定的大小時才轉儲,Size 可以指定 bytes (缺省)以及KB (sizek)或者MB (sizem).
2.3 nginx日志文件的切割
[root@linux-node1 ~]# cat /etc/logrotate.d/nginx /var/log/nginx/*.log { #日志文件的路徑 daily #每天切割
dateext #日志切割后,文件以當前日志為結尾,例如:access-logs-20181125 missingok #日志不存在分析,分析下一個 rotate 30 #日志保留30份 compress #轉存之后壓縮.tar.gz delaycompress #日志壓縮會被延后到下次分割時進行 notifempty #空文件不轉儲 create 644 nginx adm #新日志文件權限 sharedscripts #整個日志組運行一次腳本 postrotate [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` #重啟nginx,重新加載日志文件,防止日志無法寫入新文件 endscript #結束腳本 }
[root@linux-node1 ~]# logrotate -d /etc/logrotate.d/nginx #進行日志切割測試
[root@linux-node1 ~]# cat /etc/anacrontab #生效時間是在凌晨3點到22點之間,而且隨機延遲時間是45分鍾
# /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
START_HOURS_RANGE=3-22
#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
