1. 程式人生 > >linux日誌分割處理工具logrotate

linux日誌分割處理工具logrotate

logrotate 程式是一個日誌檔案管理工具。用來把舊的日誌檔案刪除,並建立新的日誌檔案,我們把它叫做“轉儲”。我們可以根據日誌檔案的大小,也可以根據其天數來轉儲,這個過程一般通過 cron 程式來執行。
logrotate 程式還可以用於壓縮日誌檔案,以及傳送日誌到指定的E-mail 。




Logrotate是基於CRON來執行的,其指令碼是「/etc/cron.daily/logrotate」
實際執行時,Logrotate會呼叫配置檔案「/etc/logrotate.conf」




這裡的設定可以理解為Logrotate的預設值,當然了,可以我們在「/etc/logrotate.d」目錄裡放置自己的配置檔案,用來覆蓋Logrotate的預設值。


logrotate 是安裝系統時就可以裝上去的,很多的大流量網站都是使用這個來進行Log的切換。
不用 Kill nginx pid, 不用restart nginx,只要重新載入一下就可以了。




nginx日誌分割:
在/etc/logrotate.d/目錄下生成nginx檔案


/mnt/nginx/logs/*.log {      //注意:具體請以自己的nginx日誌為準
    daily                   //每天切割
    dateext                 //%Y%m%d作為字尾
    missingok               //日誌不存在,分析下一個
    rotate 20                //保留最近的20個備份
    compress                //切換之後壓縮.tar.gz
    notifempty              //空檔案不轉儲
    create 640 root root    //新日誌檔案模式 root 是使用的使用者
    sharedscripts           //整個日誌組執行一次的指令碼
    postrotate
    /mnt/nginx/sbin/nginx reload > /dev/null 2>/dev/null || true
    endscript
}


如果你等不及CRON,可以通過如下命令來手動執行:
shell> logrotate -f /etc/logrotate.d/nginx
當然,正式執行前最好通過Debug選項來驗證一下,這對除錯也很重要,驗證的過程不會真的轉存:
shell> logrotate -d -f /etc/logrotate.d/nginx


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檔案。


日誌切割的執行時間是由cron程配置決定的,可檢視/etc/crontab檔案(cron時間戳格式:分時日月周)






    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要存在)




 cat /var/lib/logrotate.status