nginx的日誌檔案沒有rotate功能。如果你不處理,日誌檔案將變得越來越大,還好我們可以寫乙個nginx日誌切割指令碼來自動切割日誌檔案。
第一步就是重新命名日誌檔案,不用擔心重新命名後nginx找不到日誌檔案而丟失日誌。在你未重新開啟原名字的日誌檔案前,nginx還是會向你重新命名的檔案寫日誌,linux是靠檔案描述符而不是檔名定位檔案。
第二步向nginx主程序傳送usr1訊號。
nginx主程序接到訊號後會從配置檔案中讀取日誌檔名稱,重新開啟日誌檔案(以配置檔案中的日誌名稱命名),並以工作程序的使用者作為日誌檔案的所有者。
重新開啟日誌檔案後,nginx主程序會關閉重名的日誌檔案並通知工作程序使用新開啟的日誌檔案。
工作程序立刻開啟新的日誌檔案並關閉重名名的日誌檔案。
然後你就可以處理舊的日誌檔案了。
#nginx日誌切割指令碼
#!/bin/bash
#設定日誌檔案存放目錄
logs_path="/usr/local/nginx/logs/"
#設定pid檔案
pid_path="/usr/local/nginx/nginx.pid"
#重新命名日誌檔案
mv $access.log $access_$(date -d "yesterday" +"%y%m%d").log
#向nginx主程序發訊號重新開啟日誌
kill -usr1 `cat $`
crontab 設定作業
0 0 * bash /usr/local/nginx/nginx_log.sh
這樣就每天的0點0分把nginx日誌重新命名為日期格式,並重新生成今天的新日誌檔案。
nginx日誌切割
web 訪問日誌 access log 記錄了所有外部客戶端對web伺服器的訪問行為,包含了客戶端ip,訪問日期,訪問的url資源,伺服器返回的http狀態碼等重要資訊。一條典型的web訪問日誌如下 規劃 1 要解決問題 2 nignx沒有自動分開檔案儲存日誌的機制。由於nginx它不會幫你自動分檔...
nginx 日誌切割
直接在nginx配置檔案中,配置日誌迴圈,而不需使用logrotate或配置cron任務。需要使用到 time iso8601 內嵌變數來獲取時間。time iso8601格式如下 2015 08 07t18 12 02 02 00。然後使用正規表示式來獲取所需時間的資料。使用下面的 塊 1 2 3...
Nginx日誌切割
編輯指令碼tianshl tianshl nginx vim nginx log division.sh指令碼內容 bin sh 昨天日期 yesterday date v 1d y m d 日誌目錄 log path usr local var log nginx sdk日誌路徑 sdk path...