天天看點

nginx自動日志功能與日志自動切割腳本

nginx自動日志功能與日志自動切割腳本

關于nginx包含變量的自動日志:

nginx自動日志功能與日志自動切割腳本
nginx自動日志功能與日志自動切割腳本

使用自動日志需要注意以下:

nginx自動日志功能與日志自動切割腳本

1、nginx日志目錄權限,以我的安裝路徑為例/usr/local/nginx,那我的日志目錄就是在/usr/local/nginx/logs裡;使用了包含變量自動日志,那麼這個目錄nginx的使用者需要有寫入的權限,否則将不可能生成日志。預設情況下,nginx的運作使用者為nobady。 我的習慣是安裝一個程式然後給他配置設定一個專用賬戶使用。

nginx自動日志功能與日志自動切割腳本
nginx自動日志功能與日志自動切割腳本

2、緩存将不會被使用,因為使用了變量的原因吧(這一點我還沒有完全了解)

nginx自動日志功能與日志自動切割腳本
nginx自動日志功能與日志自動切割腳本

3、每條日志,要先打開檔案,然後寫入,最後關閉檔案,如此循環。此時,需要開啟nginx的open_log_file_cache功能,緩存經常被使用的日志檔案描述符緩存。open_log_file_cache 預設為off

nginx自動日志功能與日志自動切割腳本

open_log_file_cache max=1000 inactive=20s min_uses=2 valid=1m;

nginx自動日志功能與日志自動切割腳本
nginx自動日志功能與日志自動切割腳本

max 最大的檔案描述符數量,最大的緩存數量

nginx自動日志功能與日志自動切割腳本

inactive 在多少時間内不活動,就會被删除

nginx自動日志功能與日志自動切割腳本

min_uses 如果在inactive時間内,使用超過該參數定義的次數,就會被緩存

nginx自動日志功能與日志自動切割腳本

valid 多少時間檢查一次。

nginx自動日志功能與日志自動切割腳本
nginx自動日志功能與日志自動切割腳本

http {

nginx自動日志功能與日志自動切割腳本
nginx自動日志功能與日志自動切割腳本

…………

nginx自動日志功能與日志自動切割腳本

log_format main ‘$remote_addr – $remote_user [$time_local] “$request” ‘

nginx自動日志功能與日志自動切割腳本

‘$status $body_bytes_sent “$http_referer” ‘

nginx自動日志功能與日志自動切割腳本

‘”$http_user_agent” “$http_x_forwarded_for”‘;

nginx自動日志功能與日志自動切割腳本
nginx自動日志功能與日志自動切割腳本

access_log logs/$server_name.access.log main;

nginx自動日志功能與日志自動切割腳本
nginx自動日志功能與日志自動切割腳本
nginx自動日志功能與日志自動切割腳本

………… 省去了其他行

nginx自動日志功能與日志自動切割腳本

}

nginx自動日志功能與日志自動切割腳本
nginx自動日志功能與日志自動切割腳本

最後,日志檔案名會以在server_name中定義的名字開始。例:svr3.labexam.com.access.log

nginx自動日志功能與日志自動切割腳本
nginx自動日志功能與日志自動切割腳本

4、關于日志切割:

nginx自動日志功能與日志自動切割腳本

完成以上三項後,并不是工作的結束,隻是又一個開始。日志會随着通路量的增大急速增長,是以需要做日志的切割!

nginx自動日志功能與日志自動切割腳本
nginx自動日志功能與日志自動切割腳本

以下是一個腳本:

nginx自動日志功能與日志自動切割腳本
nginx自動日志功能與日志自動切割腳本

#!/bin/bash

nginx自動日志功能與日志自動切割腳本

#made by cheng

nginx自動日志功能與日志自動切割腳本

#blog:myhat.blog.51cto.com

nginx自動日志功能與日志自動切割腳本

#last_time=2011/08/18

nginx自動日志功能與日志自動切割腳本
nginx自動日志功能與日志自動切割腳本

#存檔的環境變量

nginx自動日志功能與日志自動切割腳本

log_path=/data1/backup_log

nginx自動日志功能與日志自動切割腳本

nginx_pid=/usr/local/webserver/nginx/nginx.pid

nginx自動日志功能與日志自動切割腳本

nginx_log=/data1/logs

nginx自動日志功能與日志自動切割腳本

yesterday=`date -d “yesterday” +%Y%m%d`

nginx自動日志功能與日志自動切割腳本
nginx自動日志功能與日志自動切割腳本

#擷取有規則的access.log名稱,以後于後面建立目錄使用

nginx自動日志功能與日志自動切割腳本

host=`ls -l $nginx_log/*.access.log | awk -F ” ” ‘{print $9}’ | awk -F “.access” ‘{print $1}’ | awk -F “$nginx_log/” ‘{print $2}’`

nginx自動日志功能與日志自動切割腳本
nginx自動日志功能與日志自動切割腳本

#循環建立目錄與移動日志。

nginx自動日志功能與日志自動切割腳本

for i in $host

nginx自動日志功能與日志自動切割腳本

do

nginx自動日志功能與日志自動切割腳本

if [ ! -d $log_path/$i/$yesterday ];then

nginx自動日志功能與日志自動切割腳本

mkdir -p $log_path/$i/$yesterday

nginx自動日志功能與日志自動切割腳本

fi

nginx自動日志功能與日志自動切割腳本

if [ ! -f $log_path/$i/$yesterday/$yesterday.access.log ];then

nginx自動日志功能與日志自動切割腳本

mv $nginx_log/$i.access.log $log_path/$i/$yesterday/$yesterday.access.log

nginx自動日志功能與日志自動切割腳本

kill -USR1 `cat $nginx_pid`

nginx自動日志功能與日志自動切割腳本

else

nginx自動日志功能與日志自動切割腳本

mv -bf $nginx_log/$i.access.log $log_path/$i/$yesterday/$yesterday.access.log_1

nginx自動日志功能與日志自動切割腳本
nginx自動日志功能與日志自動切割腳本
nginx自動日志功能與日志自動切割腳本

done

nginx自動日志功能與日志自動切割腳本
nginx自動日志功能與日志自動切割腳本

最後需要做的是,把這個腳本放到crontab裡,讓其00:00時運作!

nginx自動日志功能與日志自動切割腳本

運作該腳本後,會自動根據虛拟主機的主機名建立主目錄,在該目錄下層放建立前一天的日期目錄,然後把昨天的日志放到這個目錄裡。實作每天一次日志切割。

nginx自動日志功能與日志自動切割腳本

*******該腳本運作的前提是,使用了自動日志的功能。

繼續閱讀