一些之間沒了解過nginx的同學,估計認為nginx切割訪問日誌管理是一種很高深的知識點,其實了解了之後,分析其原理,也就是那麼回事。
nginx切割訪問日誌主要分為兩步:
(1)編寫shell指令碼(編寫你想備份的規則)。
(2)用linux的crontab命令來完整定時的自動化功能(定時呼叫執行我們寫的指令碼)。
具體步驟如下:
(1)編寫shell指令碼(shell指令碼存放的目錄為/data/runlog.sh):
#!/bin/bash
logpath=/usr/local/nginx/logs/z.com.access.log
basepath=/data/$(date -d yesterday +%y%m)
bak=$basepath/$(date -d yesterday +%y%m%d%h%m).zcom.access.log
mkdir -p $basepath
mv $logpath $bak
touch $logpath
kill -usr1 'cat /usr/local/nginx/logs/nginx.pid'
估計很多人因為不懂shell指令碼,所有會卡在這一步,下面對上面的命令進行一下講解
#!/bin/bash
是指此指令碼使用/bin/bash來解釋執行
logpath=/usr/local/nginx/logs/z.com.access.log
宣告你日誌檔案存放的路徑(我的日誌檔案為/usr/local/nginx/logs目錄下的z.com.access.log檔案)
basepath=/data/$(date -d yesterday +%y%m)
宣告乙個日期格式的變數,後面的程式呼叫,如今天是2015-08-02,那麼bathpath的值為basepath=/data/201508
bak=$pasepath/$(date -d yesterday +%y%m%d%h%m).zcom.access.log
生成乙個按照日期格式命名的檔案路徑,如現在是2015-08-02 08:01,那麼bak的值為bak=/data/201508/2015080801.zcom.access.log
mkdir -p $basepath
遞迴生成目錄 例如:mkdir -p data/201508
mv $logpath $bak
移動檔案 如:mv /usr/local/nginx/logs/z.com.access.log /data/201508/2015080801.zcom.access.log 將usr/local/nginx/logs下的z.com.access.log移動到/data/201508目錄下並重命名為2015080801.zcom.access.log
touch $logpath
新建乙個檔案,如:touch/usr/local/nginx/logs/z.com.access.log
kill -usr1 'cat /usr/local/nginx/logs/nginx.pid'
向nginx主程序發訊號,重新開啟日誌
(2)呼叫crontab命令來定時備份指令碼
crontab -e開啟定時配置
新增一行:*/30 * * * * sh /data/runlog.sh(每半個小時執行一次/data/runlog.sh)
如此,乙個簡單的定時切割日誌就ok了
下面是runlog.sh和crontab -e的截圖
3 Nginx日誌管理 含Nginx日誌切割
我們觀察nginx的server段,可以看到如下類似資訊 access log logs host.access.log main 這說明 該server,它的訪問日誌的檔案是 logs host.access.log 使用的格式 main 格式.除了main格式,你可以自定義其他格式.main格式...
Nginx日誌切割 sedEmail簡單使用
bin bash name 此指令碼做為切割nginx每日日誌使用 version number 1.1 language bash shell date 2017 05 11 author xiong nginxlogs usr share nginx log datetime date y m ...
nginx日誌切割
web 訪問日誌 access log 記錄了所有外部客戶端對web伺服器的訪問行為,包含了客戶端ip,訪問日期,訪問的url資源,伺服器返回的http狀態碼等重要資訊。一條典型的web訪問日誌如下 規劃 1 要解決問題 2 nignx沒有自動分開檔案儲存日誌的機制。由於nginx它不會幫你自動分檔...