簡述nginx日誌管理切割日誌 親測可行

2022-09-14 17:09:20 字數 2905 閱讀 6047

日誌切割

nginx的日誌檔案沒有rotate功能 編寫每天生成乙個日誌,我們可以寫乙個nginx日誌切割指令碼來自動切割日誌檔案

第一步就是重新命名日誌檔案(不用擔心重新命名後nginx找不到日誌檔案而丟失日誌。在你未 重新開啟原名字的日誌檔案前,nginx還是會向你重新命名的檔案寫日誌,linux是靠檔案描述 符而不是檔名定位檔案 )

第二步向nginx主程序傳送usr1訊號

nginx主程序接到訊號後會從配置檔案中讀取日誌檔名稱

重新開啟日誌檔案 (以配置檔案中的日誌名稱命名) ,並以工作程序的使用者作為日誌檔案 的所有者 重新開啟日誌檔案後,nginx主程序會關閉重名的日誌檔案並通知工作程序使用新開啟 的日誌檔案

工作程序立刻開啟新的日誌檔案並關閉重名名的日誌檔案 然後你就可以處理舊的日誌檔案了。[或者重啟nginx服務]

nginx日誌按每分鐘自動切割指令碼如下 :

新建shell指令碼:

vi   /opt/nginx/nginx_log.sh
#!/bin/bash

#設定日誌檔案存放目錄

#log_home="/home/wwwlogs/"

log_home="/usr/local/nginx/logs"

#備分檔名稱

log_path_bak="$(date -d yesterday +%y%m%d%h%m)".access.log

#重新命名日誌檔案

mv $/access.log $/$

#向nginx主程序發訊號重新開啟日誌

kill -usr1 `cat /usr/local/nginx/logs/nginx.pid`

建立crontab設定作業

設定日誌檔案存放目錄crontab -e

#/www/cookie.com/log.cookie.com/目錄下

#-mtime +7 7天前的檔案

#-name "push*.log" 檔名稱匹配push*.log

# -exec rm -rf 強制刪除,包含目錄

10 0 * * * /opt/sh/auto-del-7-day-ago-log.sh > /dev/null 2>&1

#每天凌晨0點10分執行

參考:

超過90天的日誌檔案 刪除

00 03 * * * find /home/connect/nginx/logs/ -type f -mtime +90 -delete
#切割日誌 

if ($time_iso8601 ~ '(\d-\d-\d)')

access_log /home/wwwlogs/access-$tttt.log ;

*****====下面 記錄我出現的問題:**********

在介紹問題之前,介紹乙個命名,時刻檢視當前正在執行的定時任務

tail -f /var/log/cron
問題1.反引號問題,導致 kill 關閉掉程序時出錯

錯誤寫法

kill -usr1 cat `/usr/local/nginx/logs/nginx.pid`
正確寫法

kill -usr1 `cat /usr/local/nginx/logs/nginx.pid`
問題2:許可權問題

大家都知道,普通使用者在重啟nginx服務的時候,需要使用root超級使用者許可權

sudo service nginx restart
所以定時任務,需要切換到root使用者使用root許可權去執行定時任務

[root@vagrant-centos7 logs]# crontab -l

* * */1 * * sh /usr/local/nginx/logs/nginx_log.sh #一天生成乙個日誌檔案

新增定時任務後需要重啟crond 服務

這個是每分鐘產生定時日誌檔案

3 Nginx日誌管理 含Nginx日誌切割

我們觀察nginx的server段,可以看到如下類似資訊 access log logs host.access.log main 這說明 該server,它的訪問日誌的檔案是 logs host.access.log 使用的格式 main 格式.除了main格式,你可以自定義其他格式.main格式...

nginx日誌切割

web 訪問日誌 access log 記錄了所有外部客戶端對web伺服器的訪問行為,包含了客戶端ip,訪問日期,訪問的url資源,伺服器返回的http狀態碼等重要資訊。一條典型的web訪問日誌如下 規劃 1 要解決問題 2 nignx沒有自動分開檔案儲存日誌的機制。由於nginx它不會幫你自動分檔...

nginx 日誌切割

直接在nginx配置檔案中,配置日誌迴圈,而不需使用logrotate或配置cron任務。需要使用到 time iso8601 內嵌變數來獲取時間。time iso8601格式如下 2015 08 07t18 12 02 02 00。然後使用正規表示式來獲取所需時間的資料。使用下面的 塊 1 2 3...