nginx 的日誌都是寫在乙個檔案當中的,不會自動地進行切割,如果訪問量很大的話,將導致日誌檔案容量非常大,不便於管理和造成nginx 日誌寫入效率低下等問題。所以,往往需要要對access_log、error_log日誌進行切割。
切割日誌一般利用usr1訊號讓nginx產生新的日誌。例項:
1234567
891011
1213
1415
16
#!/bin/bashlogdir="/data/logs/nginx"
pid=`cat $logdir/nginx.pid`
date=`date -d "1 hours ago" +%y%m%d%h`
date_old=`date -d "7 days ago" +%y%m%d`
for i in `ls $logdir/*access.log`; do
mv $i $i.$date
done
for i in `ls $logdir/*error.log`; do
mv $i $i.$date
done
kill -s usr1 $pid
rm -v $logdir"/access.log."$date_old*
rm -v $logdir"/error.log."$date_old*
1、分析:
2、說明:
在沒有執行kill -usr1 $pid之前,即便已經對檔案執行了mv命令而改變了檔名稱,nginx還是會向新命名的檔案」*access.log.2016032623」照常寫入日誌資料的。原因在於:linux系統中,核心是根據檔案描述符來找檔案的。
3、logrotates:
使用系統自帶的logrotates,也可以實現nginx的日誌分割,檢視其bash原始碼,發現也是傳送usr1這個訊號。
Nginx 日誌自動分割指令碼
1 分割指令碼 cut nginx logs.sh bin bash cut nginx logs.sh author xingxiudong set the path to nginx log files log files path var log nginx set nginx log fil...
nginx日誌分割
以下這個指令碼實施的核心是 每天凌晨將日誌檔案壓縮並移動到相應的年份月份目錄下,然後重新生成日誌檔案,同時記錄日誌 bin bash logs path home wwwlog 日誌存放位置 year date y 年份 month date m 月份 day date y m d 日期 time ...
Nginx 日誌分割
usr bin bash 日誌檔案存放目錄 logs path var log nginx nginx程序pid nginx pid cat var run nginx.pid 日誌名稱 logs name date d yesterday y m d 改名 mv logs path access....