1. 程式人生 > 其它 >linux 日誌按大小切割_Linux日誌切割之logrotate

linux 日誌按大小切割_Linux日誌切割之logrotate

技術標籤:linux 日誌按大小切割

cee8bfa351da89daea70092aa4973f5e.png

命令格式

logrotate命令格式:

logrotate [OPTION...] -d, --debug:debug模式,測試配置檔案是否有錯誤。-f, --force :強制轉儲檔案。-v, --verbose :顯示轉儲過程。

手動強制切割日誌

/usr/sbin/logrotate -f /etc/logrotate.d/nginx/usr/sbin/logrotate -d -f /etc/logrotate.d/nginx

檢視各log檔案具體執行情況

cat /var/lib/logrotate/logrotate.status
cee8bfa351da89daea70092aa4973f5e.png

配置檔案介紹

# cat /etc/logrotate.conf# 底下的設定是 "logrotate 的預設值" ,如果別的檔案設定了其他的值,# 就會以其它檔案的設定為主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/ 目錄中的所有檔案都載入進來/var/log/wtmp {                 //僅針對 /var/log/wtmp 所設定的引數monthly                    //每月一次切割,取代預設的一週minsize 1M              //檔案大小超過 1M 後才會切割create 0664 root utmp            //指定新建的日誌檔案許可權以及所屬使用者和組rotate 1                    //只保留一個日誌.}# 這個 wtmp 可記錄使用者登入系統及系統重啟的時間

其他重要引數

compress                            #通過gzip 壓縮轉儲以後的日誌nocompress                          #不做gzip壓縮處理copytruncate                        #用於還在開啟中的日誌檔案,把當前日誌備份並截斷;是先拷貝再清空的方式,拷貝和清空之間有一個時間差,可能會丟失部分日誌資料。nocopytruncate                      #備份日誌檔案不過不截斷create mode owner group             #輪轉時指定建立新檔案的屬性,如create 0777 nobody nobodynocreate                            #不建立新的日誌檔案delaycompress                      #和compress 一起使用時,轉儲的日誌檔案到下一次轉儲時才壓縮nodelaycompress                    #覆蓋 delaycompress 選項,轉儲同時壓縮。missingok                          #如果日誌丟失,不報錯繼續滾動下一個日誌errorsaddress#轉儲時的錯誤資訊傳送到指定的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 100ksize = 100M 或 size 100M


切割nginx日誌示例

[[email protected] ~]# vim /etc/logrotate.d/nginx/usr/local/nginx/logs/*.log {dailyrotate 7missingoknotifemptydateextsharedscriptspostrotate    if [ -f /usr/local/nginx/logs/nginx.pid ]; then        kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`    fiendscript}

logrotate是基於CRON執行的,所以需要設定crontab任務:

$ cat /etc/cron.d/logrotate 59 23 * * * root /usr/sbin/logrotate /etc/logrotate.conf >/dev/null 2>&1