linux shell命令切割nginx訪問日誌

小小菜鳥腳本,菜鳥思惟,見諒!!!
linux

1、首先是日誌切割
nginx

#! /bin/bushshell


#######################################################################################服務器

#方法封裝,切割日誌oop

#author:譚家俊   date:2015-08-20   funtion:linux按天分割nginx訪問日誌,而且保3天內的。學習

########################################################################################spa

nginx_log="/usr/local/nginx/logs/access.log"  #nginx訪問日誌目錄調試

new_log_path="/usr/local/nginx/logs"          #切割後的目錄日誌

today=`date +%Y-%m-%d`                        #今天的時間日期  io


function sortTheLog(){

rm -rf ${new_log_path}/${today} #刪除一下今天的日誌文件目錄,避免以前手動有產生同樣名字的文件名字

mkdir ${new_log_path}/${today}  #建立記錄今天的日誌目錄/usr/local/nginx/logs/2015-08-20(今天是2015-08-20的話)

echo ${new_log_path}            #調試信息的輸出

cp -rf ${nginx_log} ${new_log_path}/${today}  #將今天的nginx訪問日誌access.log複製到新建的日誌目錄下 

echo "" |cat > ${nginx_log}     #清空nginx的日誌文件access.log    

#這裏是寫一個for循環玩玩而已,打印前3天的日期

for loop in 1 2 3

do

today_n=`date -d  "${loop} days ago" +%Y-%m-%d`

echo ${today_n}

done

#for end

//由於是要保留3天的日誌,因此這裏刪除前4天的日誌

days_ago_4=`date -d "4 days ago" +%Y-%m-%d`  #前4天的日期

del_path="${new_log_path}/${days_ago_4}"     #刪除的路徑

#echo "$del_path"

# read ${new_log_path}/days_ago_4

if [ -d "$del_path" ]                        #路徑若是存在,則刪除

then

echo ""

rm -rf ${del_path}

else

echo ""


fi

}

sortTheLog 調用方法

2、日誌檢查

#! /bin/bush

##################

#方法封裝

#排查方法   入口:#param1:錯誤代碼前綴(int)   #param:錯誤代碼後綴(int)  返回:無

function check(){

flag=0   #while循環入口

end=$2   #輸入參數2,循環結束

start=$1 #輸入參數1,循環開始

while [ $flag -le $end ]  #若是start>end,結束循環

do

s=$[$start+${flag}]  

state="HTTP/1.1\" ${s}"  #遍歷服務器每種錯誤狀態碼,如500,501,502

#echo ${s}

#echo ${state}

#echo `grep "HTTP/1.1\" 404" ${new_log_path}/${today}/access.log | wc -l`

#echo `grep "${state}" ${new_log_path}/${today}/access.log | wc -l`           #根據錯誤代碼統計日誌中錯誤行數

error_num=`grep "${state}" ${new_log_path}/${today}/access.log | wc -l`  #匹配今天的日誌有沒這種狀態碼的記錄行,有就統計錯誤數量記錄

if [ $error_num -gt 0 ]                                                      #大於0,有錯 

then

echo "${state} error..."

#echo "服務器有錯誤啦!" | mail -s "發現服務器訪問日誌錯誤代碼" 15986943045@163.com

mail -s "發現服務器訪問日誌錯誤代碼" 15986943045@163.com < ${new_log_path}/${today}/access.log    #郵件通知,把錯誤日誌以郵件發送

fi

flag=$[$flag+1]

done

}

#調用排查方法,排查4xx(請求錯誤)

check 400 14

#調用排查方法,5xx(服務器錯誤)

check 500 5

將以上的內容保存成shell腳本,加入定時器便可天天按時自我分割和排查...也算是本身學習的小小例子吧!!!

注意:在作發送郵件的時候,郵箱儘可能不要用qq郵箱,會被攔截收不到的。我用的是163郵箱,並且進行了白名單設置。因此接收郵件挺快。

相關文章
相關標籤/搜索