nginx 日誌檔案分隔

2022-06-11 11:21:10 字數 2572 閱讀 3629

nginx命令幫助如下

nginx -h

nginx version: nginx/0.8.45

usage: nginx [-?hvvt] [-s signal] [-c filename] [-p prefix] [-g directives]

options:

-?,-h         : this help   // 幫助

-v            : show version and exit // 顯示版本

-v            : show version and configure options then exit // 顯示版本及配置選項

-t            : test configuration and exit // 測試配置檔案,非常重要

-s signal     : send signal to a master process: stop, quit, reopen, reload // 傳送訊號

-p prefix     : set prefix path (default: /opt/nginx-0.8.45/)

-c filename   : set configuration file (default: conf/nginx.conf) // 指定配置檔案

上圖是nginx官方**對nginx訊號的解釋文件擷取

下面是一些常見nginx命令

nginx -c /path/to/nginx.conf  // 以特定目錄下的配置檔案啟動nginx:

nginx -s  reopen   // 重新開啟日誌檔案

nginx -s stop  // 快速停止nginx

nginx -s quit  // 完整有序的停止nginx

nginx -t     // 測試當前配置檔案是否正確

nginx -t -c /path/to/nginx.conf  //測試特定的nginx配置檔案是否正確

為什麼要切割日誌?一般nginx安裝好後有些人會開啟日誌記錄,有些人會關閉日誌記錄,開啟日誌記錄的人一般都會把架設在nginx上的所有**日誌都存在同乙個檔案裡(比如我存在access.log日誌檔案裡),這樣日積月累所有**的訪問記錄就會把日誌檔案越積越大,當需要檢視日誌檔案的時候一看就是一大串,不方便查詢。現在,如果我把每天的日誌檔案分割開來用相應的日期標識出來這樣就大大方便查詢了。

linux下我們可以簡單的把日誌檔案mv走,但是你會發現mv走後新的日誌檔案沒有重新生成,一般linux下用的檔案控制代碼,檔案被開啟情況下你mv走檔案,但是原來操作這個檔案的程序還是有這個檔案的inode等資訊,原程序還是讀寫原來的檔案,因此簡單的mv是無法生效的。

因此建議過程如下

1. mv原檔案到新檔案目錄中,這個時候 nginx還寫這個檔案(寫入新位置檔案中了)

2. 呼叫nginx -s  reopen用來開啟日誌檔案,這樣nginx會把新日誌資訊寫入這個新的檔案中

這樣完成了日誌的切割工作, 同時切割過程中沒有日誌的丟失

1 編寫 shell 指令碼

#!/bin/bash

logs_path=/usr/local/nginx/logs

yesterday=$(date -d "

yesterday

" +%y-%m-%d)

mv $/access.log $/access_$.log

mv $/error.log $/error_$.log

# 以下任選其一

/usr/local/nginx/sbin/nginx -s reopen

# 或者

# kill -usr1 $(cat /usr/local/nginx/logs/nginx.pid)

該指令碼以天為單位分割,使用 reopen 訊號重新配置日誌,或者向 nginx 主程序傳送 usr1 訊號。

命名為 nginxlogrotate.sh,儲存到目錄 /usr/local/nginx/logs

2 設定定時任務

新建 crontab 任務:

crontab -e
編輯檔案,每天 00:00 以 root 身份執行指令碼

0

0 * * * root /usr/local/nginx/logs/nginxlogrotate.sh

nginx -s  reload 命令載入修改後的配置檔案,命令下達後發生如下事件

1. nginx的master程序檢查配置檔案的正確性,若是錯誤則返回錯誤資訊,nginx繼續採用原配置檔案進行工作(因為worker未受到影響)

2. nginx啟動新的worker程序,採用新的配置檔案

3. nginx將新的請求分配新的worker程序

4. nginx等待以前的worker程序的全部請求已經都返回後,關閉相關worker程序

5. 重複上面過程,知道全部舊的worker程序都被關閉掉

Nginx 日誌分隔

bin bash access log dir source opt logs dir report opt htdocs domain public access log cd dir source mkdir p dir report date y date m mv domain.log di...

nginx 日誌檔案

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

Linux 下nginx 日誌按天分隔處理

nginx 的日誌有2個檔案,分別為訪問日誌 access.log 和錯誤日誌 error.log 訪問日誌會隨著訪問量的增加極速的變大,而且在一些雲服務的負載均衡下,後台內網也會不停的有訪問記錄,例如阿里雲 不知道在阿里雲後台有沒有設定的地方,沒去研究 而當訪問日誌太大,就會導致伺服器效能降低。思...