nginx日誌分割-shell案例
阿新 • • 發佈:2018-11-11
現象,我在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系統中核心是根據檔案描述符來找檔案的。