logrotate程序是一個日誌文件管理工具。用於分割日誌文件,刪除舊的日誌文件,並建立新的日誌文件,起到"轉儲"做用。能夠節省磁盤空間。例如,你能夠設置logrotate,讓/var/log/logfile日誌文件每30天輪循,並刪除超過6個月的日誌。配置完後,logrotate的運做徹底自動化,沒必要進行任何進一步的人爲干預。php
1)系統版本html
[root@test206 ~]#cat /etc/redhat-release CentOS Linux release 7.6.1810 (Core) [root@test206 ~]#uname -r 3.10.0-957.21.3.el7.x86_64
2)默認centos系統安裝自帶logrotate,直接使用yum 安裝java
3)安裝包說明node
[root@test206 ~]#rpm -ql logrotate /etc/cron.daily/logrotate #Logrotate是基於CRON來運行的,其腳本是/etc/cron.daily/logrotate /etc/logrotate.conf #logrotate 自身的配置文件 /etc/logrotate.d #配置切割設置的目錄 /etc/rwtab.d/logrotate /usr/sbin/logrotate /usr/share/doc/logrotate-3.8.6 /usr/share/doc/logrotate-3.8.6/CHANGES /usr/share/doc/logrotate-3.8.6/COPYING /usr/share/man/man5/logrotate.conf.5.gz /usr/share/man/man8/logrotate.8.gz /var/lib/logrotate /var/lib/logrotate/logrotate.status #日誌切割的狀態信息 #注意 logrotate的配置文件是/etc/logrotate.conf,一般不須要對它進行修改。 日誌文件的輪循設置在獨立的配置文件中,它(們)放在/etc/logrotate.d/目錄下。
[root@test206 ~]#cat /etc/logrotate.conf weekly #默認每一週執行一次rotate輪轉工做 rotate 4 #保留多少個日誌文件(輪轉幾回).默認保留四個.就是指定日誌文件刪除以前輪轉的次數,0 指沒有備份 create #自動建立新的日誌文件,新的日誌文件具備和原來的文件相同的權限;由於日誌被更名,所以要建立一個新的來繼續存儲以前的日誌 dateext #切割後的日誌文件以當前日期爲格式結尾,如xxx.log-20131216,註釋掉,切割出來是按數字遞增,即xxx.log-1這種格式 compress #是否經過gzip壓縮轉儲之後的日誌文件,如xxx.log-20131216.gz ;若是不須要壓縮,註釋掉就行 include /etc/logrotate.d #將 /etc/logrotate.d/ 目錄中的全部文件都加載進來 # 這個 wtmp 可記錄用戶登陸系統及系統重啓的時間 # 由於有 minsize 的參數,所以不見得每月必定會執行一次喔.要看文件大小。 /var/log/wtmp { #僅針對 /var/log/wtmp 所設定的參數 monthly #每個月一次切割,取代默認的一週 create 0664 root utmp #文件大小超過 1M 後纔會切割 minsize 1M #指定新建的日誌文件權限以及所屬用戶和組 rotate 1 #只保留一個日誌. } /var/log/btmp { ##僅針對 /var/log/wtmp 所設定的參數 missingok monthly create 0600 root utmp rotate 1 }
#Logrotate是基於CRON來運行的,其腳本是/etc/cron.daily/logrotate,日誌輪轉是系統自動完成的。 [root@test206 ~]#cat /etc/cron.daily/logrotate #!/bin/sh /usr/sbin/logrotate -s /var/lib/logrotate/logrotate.status /etc/logrotate.conf EXITVALUE=$? if [ $EXITVALUE != 0 ]; then /usr/bin/logger -t logrotate "ALERT exited abnormally with [$EXITVALUE]" fi exit 0
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
#logrotate命令格式: logrotate [OPTION...] <configfile> -d, --debug #debug模式,測試配置文件是否有錯誤。 -f, --force #強制轉儲文件。 -m, --mail=command #壓縮日誌後,發送日誌到指定郵箱。 -s, --state=statefile #使用指定的狀態文件。 -v, --verbose #顯示轉儲過程。 #若是等不及cron自動執行日誌輪轉,想手動強制切割日誌,須要加-f參數;不過正式執行前最好經過Debug選項來驗證一下(-d參數),這對調試也很重要 /usr/sbin/logrotate -f /etc/logrotate.d/nginx /usr/sbin/logrotate -d -f /etc/logrotate.d/nginx #根據日誌切割設置進行操做,並顯示詳細信息 /usr/sbin/logrotate -v /etc/logrotate.conf /usr/sbin/logrotate -v /etc/logrotate.d/php #根據日誌切割設置進行執行,並顯示詳細信息,可是不進行具體操做,debug模式 /usr/sbin/logrotate -d /etc/logrotate.conf /usr/sbin/logrotate -d /etc/logrotate.d/nginx #查看各log文件的具體執行狀況 cat /var/lib/logrotate/logrotate.status
通常在部署Tomcat後,運行久了,catalina.out文件會愈來愈大,甚至上G,對系統的穩定形成了必定的影響linux
[root@test206 ~]#vim /usr/java/tomcat/dianchou-app-boss/bin/catalina.sh # Get standard environment variables PRGDIR=`dirname "$PRG"` CATALINA_PID=/usr/java/tomcat/dianchou-app-boss/tomcat.pid
[root@test206 bin]#./shutdown.sh [root@test206 bin]#./startup.sh [root@test206 bin]#cd ../ [root@test206 dianchou-app-boss]#ll tomcat.pid -rw-r--r-- 1 root root 6 Nov 12 20:48 tomcat.pid [root@test206 dianchou-app-boss]#cat tomcat.pid 19472
[root@test206 ~]#vim /etc/logrotate.d/tomcat_appboss_catalina /usr/java/tomcat/dianchou-app-boss/logs/catalina.out { daily rotate 15 missingok notifempty dateext compress delaycompress sharedscripts create 644 root root postrotate if [ -f /usr/java/tomcat/dianchou-app-boss/tomcat.pid ]; then kill -USR1 `cat /usr/java/tomcat/dianchou-app-boss/tomcat.pid` #測試殺死了進程,但沒從新啓動 rm -f /usr/java/tomcat/dianchou-app-boss/tomcat.pid #刪除pid文件,否則報錯 /usr/java/tomcat/dianchou-app-boss/bin/startup.sh #重啓tomcat,從新生成pid文件 fi endscript } #USR1信號解釋 一、USR1亦一般被用來告知應用程序重載配置文件;例如,向Apache HTTP服務器發送一個USR1信號將致使如下步驟的發生:中止接受新的鏈接,等待當前鏈接中止,從新載入配置文件,從新打開日誌文件,重啓服務器,從而實現相對平滑的不關機的更改。 二、在沒有執行kill -USR1 `cat ${pid_path}`以前,即使已經對文件執行了mv命令而改變了文件名稱,tomcat仍是會向新命名的文件" xxx.out_ 20180619"照常寫入日誌數據的。緣由在於:linux系統中,內核是根據文件描述符來找文件的。
[root@test206 logs]#ll catalina.out* -rw-r--r-- 1 root root 6241051 Nov 12 20:48 catalina.out [root@test206 logs]#logrotate -vf /etc/logrotate.d/tomcat_appboss_catalina reading config file /etc/logrotate.d/tomcat_appboss_catalina Allocating hash table for state file, size 15360 B Handling 1 logs rotating pattern: /usr/java/tomcat/dianchou-app-boss/logs/catalina.out forced from command line (15 rotations) empty log files are not rotated, old logs are removed considering log /usr/java/tomcat/dianchou-app-boss/logs/catalina.out log needs rotating rotating log /usr/java/tomcat/dianchou-app-boss/logs/catalina.out, log->rotateCount is 15 dateext suffix '-20191112' glob pattern '-[0-9][0-9][0-9][0-9][0-9][0-9][0-9][0-9]' glob finding logs to compress failed glob finding old rotated logs failed renaming /usr/java/tomcat/dianchou-app-boss/logs/catalina.out to /usr/java/tomcat/dianchou-app-boss/logs/catalina.out-20191112 creating new /usr/java/tomcat/dianchou-app-boss/logs/catalina.out mode = 0644 uid = 0 gid = 0 running postrotate script Using CATALINA_BASE: /usr/java/tomcat/dianchou-app-boss Using CATALINA_HOME: /usr/java/tomcat/dianchou-app-boss Using CATALINA_TMPDIR: /usr/java/tomcat/dianchou-app-boss/temp Using JRE_HOME: /usr Using CLASSPATH: /usr/java/tomcat/dianchou-app-boss/bin/bootstrap.jar:/usr/java/tomcat/dianchou-app-boss/bin/tomcat-juli.jar Using CATALINA_PID: /usr/java/tomcat/dianchou-app-boss/tomcat.pid Tomcat started. [root@test206 logs]#ll catalina.out* -rw-r--r-- 1 root root 4594 Nov 12 20:56 catalina.out -rw-r--r-- 1 root root 6241051 Nov 12 20:48 catalina.out-20191112 #後續切割時會對前面的日誌進行壓縮
[root@test206 ~]#crontab -l #logrotate tomcat 59 23 * * * /usr/sbin/logrotate -vf /etc/logrotate.d/tomcat_appboss_catalina &>/dev/null
參考文檔:nginx