不論是什麼日誌文件,都是會愈來愈大的,大到必定程度就是個可怕的事情了,因此要及早的作處理,方法之一就是按時間段來存儲,不過linux系統提供了Logrotate的日誌管理工具,很好用,不用寫計劃任務腳本了,不過弊端是轉儲後的日誌文件放入指定的目錄,必須和當前日誌文件再同一個系統,下面是摘錄別人的。記錄下以備不時之需。node
Logrotate是Linux下一款日誌管理工具,可用於日誌文件的轉儲(即刪除舊日誌文件,建立新日誌文件)。能夠根據日誌大小或者按照某時段間隔來轉儲,內部使用cron程序來執行。Logrotate還能夠在壓縮日誌,併發送到指定E-mail。linux
Logrotate默認配置文件是/etc/logrotate.conf,其中第一行是:nginx
include /etc/logrotate.d
說明包含了該目錄下的配置,普通用戶的配置也在這裏,好比nginx日誌切割 /etc/logrotate.d/nginx。Logrotate有許多可配置參數,也可以使用man命令來查詢:apache
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 個備份 tabootext [+] list 讓logrotate 不轉儲指定擴展名的文件,缺省的擴展名是:.rpm-orig, .rpmsave, v, 和 ~ size size 當日志文件到達指定的大小時才轉儲,bytes(缺省)及KB(sizek)或MB(sizem)
先看看centOS安裝後的logrotate.conf部份內容:併發
/var/log/wtmp { //用戶登陸和持續時間日誌 monthly //按周切割 minsize 1M //最小達到1M create 0664 root utmp //切割後日志文件屬性 rotate 1 //保留副本 }
簡單明瞭。如您所料,include能夠批量指定配置文件,典型應用都包含在/etc/logrotate.d/目錄下,有:apache、linuxconf、syslog等。注意:include引入配置會覆蓋同名默認配置工具
prerotate和postrotate可指定轉儲先後(即切割先後)執行的linux腳本(endscript結束),如post
/var/log/messages { prerotate //轉儲以前腳本 /usr/bin/chattr -a /var/log/messages //去掉該文件-a屬性 endscript //腳本結束 postrotate //轉儲後腳本 /usr/bin/kill -HUP syslogd //從新初始化系統日誌守護程序 syslogd /usr/bin/chattr +a /var/log/messages //添加-a屬性,防止文件被覆蓋 endscript }
Logrotate的備份策略(以兩個備份來講明,即rotate 2,文件error.log):原始文件error.log,通過一次轉儲,會生成error.log.1;第二次轉儲,生成error.log.2;第三次轉儲,error.log.n命名爲error.log.n+1,同時生成新的error.log.1,刪除error.log.n+1文件。測試
轉儲能夠經過強制執行來觀察工做過程spa
logrotate -vf /etc/logrotate.d/nginx
/var/log/nginx/*.log { //注意:具體請以本身的nginx日誌爲準 daily //天天切割 dateext //%Y%m%d做爲後綴 missingok //日誌不存在,分析下一個 rotate 2 //保留兩個備份 compress //轉儲以後壓縮.tar.gz notifempty //空文件不轉儲 create 640 nginx adm //新日誌文件模式 sharedscripts //整個日誌組運行一次的腳本 postrotate [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` //重啓nginx,從新加載日誌文件,防止不寫 `cp -f /var/log/nginx/*.* /var/log/nginx/backup` //自定義腳本,將舊日誌copy到backup文件夾(backup要存在) endscript }
默認logrotate是經過crontab按期執行的,咱們也能夠手動執行查看結果:日誌
# logrotate -vf /data/log/nginx/access.log
驗證是否執行,查看cron的日誌便可
# grep logrotate /var/log/cron
使用logrotate管理nginx的日誌,優勢在於:
1、不須要擔憂日誌文件會將目錄塞滿,logrotate會保留特定個數文件; 2、天天的日誌放在一個文件中,不須要一直往前翻,方便查閱;