1. 程式人生 > >Linux系統nginx日誌切割指令碼

Linux系統nginx日誌切割指令碼

指令碼說明:本指令碼是將現有的日誌切割出來(執行指令碼之前日誌檔案中所有的日誌,並不是按照日誌裡面的日期進行切割),然後放到一個特定的資料夾中,並將切割出來的日誌檔名稱後面加上相應的日期。而且,本指令碼可以同時切割.log型別的日誌檔案和沒有後綴的日誌檔案。

示例1:.log型別的日誌檔案。以access.log為例,在2017-4-5這天切割,將切割出來的日誌檔案命名為access-20170404.log,存放在access資料夾下。

示例2:沒有任何字尾的檔案型別的日誌檔案。以access_log為例,此型別的日誌檔案是以 _log 和 .log 進行區分篩選的,假如在2017-4-5這天切割,將切割出來的日誌檔案命名為access_log-20170404,存放在access_logs(後面有個s,用以區分access_log,因為無法新建access_log這個資料夾)資料夾下。

其他部分註釋中都有解釋。



#!/bin/bash

#nginx log segmentation shell script
#
#日誌目錄
log_dir="/www/run/nginx/logs/"
cd $log_dir
time=`date +%Y%m%d --date="-1 day"`
#nginx啟動目錄
nginx_dir="/www/run/nginx/sbin/nginx -c /www/run/nginx/conf/nginx.conf"
#日誌儲存天數
save_days=15
#日誌檔名所處'/'分割的位置,key('/'數+1)
num=6;
 
#取得檔案不帶字尾的檔名(非.log檔案)
website=`ls $log_dir*_log | xargs -n 1 | cut -f $num -d "/"`
#日誌目錄下所有的日誌檔案為資料夾,迴圈新建對應的時間檔案
for i in $website
do
    #判斷目錄是否存在
    if [ ! -d $log_dir$i ];then
        mkdir $i"s"
    fi
    mv $log_dir$i  $log_dir$i"s"/$i-$time
done


#取得檔案不帶字尾的檔名(.log檔案)
website2=`ls $log_dir*.log | xargs -n 1 | cut -f 1 -d "." | cut -f $num -d "/"`
#日誌目錄下所有的日誌檔案為資料夾,迴圈新建對應的時間檔案
for i in $website2
do
    #判斷目錄是否存在
    if [ ! -d $log_dir$i ];then
        mkdir $i
    fi
    mv $log_dir$i.log  $log_dir$i/$i-$time.log
done


 
#刪除設定天數前的資料
find $log_dir/ -mtime +$save_days -exec rm -rf {} \;
 
#平滑啟動nginx

$nginx_dir -s reload