方法1(指令碼+定時執行):
#step1:加指令碼 cut_nginx_log.sh,主程序把usr1訊號發給worker,worker接到這個訊號後,會重新開啟日誌檔案方法2(使用logrotate):#!/bin/bash
logs_path="/usr/local/nginx-1.6.0/logs"
log_name="access.log"
pid_path="/usr/local/nginx-1.6.0/logs/nginx.pid"
mv $/$ $/"access-"$(date --date="last day" "+%y-%m-%d").log
kill -usr1 `cat $`
#find $ -name "*.log" -mtime +30 -delete
#step2:crontab 定時跑指令碼,每天0點0分執行指令碼
crontab -e
0 0 * * * /usr/local/nginx-1.6.0/logs/cut_nginx_log.sh
vi /etc/logrotate.d/nginx
/usr/local/nginx/logs/www.willko.cn.log /usr/local/nginx/logs/nginx_error.log 裡加上:*注意這個要有pcre庫,不然if處會報錯if ($time_iso8601 ~ "^(\d)-(\d)-(\d)t(\d):(\d):(\d)")
set $ng_year $1;
set $ng_month $2;
set $ng_day $3;
set $ng_hour $4;
set $ng_minutes $5;
set $ng_seconds $6;
access_log logs/$ng_year-$ng_month-$ng_day-$ng_hour-host.access.log;
q&a:
1、nginx日誌實現自動分割了嗎?
實際上沒有,但是用apt/yum安裝nginx時會自動配置logrotate。
logrotate作為乙個/etc/cron.daily/logrotate任務每日定時執行。
你往/etc/logrotate.d/下新增配置檔案logrotate執行時會自動根據配置檔案進行日誌歸檔。
如apt-get安裝的nginx官方源的日誌歸檔配置檔案為 /etc/logrotate.d/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...