1. 程式人生 > >nginx日誌分割-shell案例

nginx日誌分割-shell案例

現象,我在windows環境下寫了一個sh指令碼,然後ftp到liunx伺服器,程式碼看起來非常正確,就是執行不了.報錯如下:

cannot  stat  '/alidata/server/nginx/logs/\r/access.log'

問題:指令碼編碼問題

解決:

vim 下命令

普通模式  :set  ff    //檢視編碼 doc  或者unix

              :set  fileformat=unix   //設定編碼

指令碼程式碼:

#!/bin/bash

savepath_log='/opt/nginx/logs'

nglogs='/alidata/server/nginx/logs'

mkdir -p $savepath_log/$(date +%Y)/$(date +%m)

mv ${nglogs}/access.log ${savepath_log}/$(date +%Y)/$(date +%m)/access.$(date +%Y%m%d).log

mv ${nglogs}/error.log ${savepath_log}/$(date +%Y)/$(date +%m)/error.$(date +%Y%m%d).log

kill -USR1 `cat /alidata/server/nginx/logs/nginx.pid`

#USR1 重新開啟一個日誌檔案

分析: 

1. nginx 的主程序收到USR1訊號,會重新開啟日誌檔案(配置檔案中設定的日誌,如果不存在,會自動建立一個新的xxx.log)

2. 在沒有執行kill -USR1 `cat ${pid_path}` 之前,即便已經對檔案執行了mv命令改變檔名稱,nginx還是會向新命名的檔案access_20160801.log 照常寫入日誌資料的。原因是linux系統中核心是根據檔案描述符來找檔案的。