天天看點

Nginx 日志檔案切割

Nginx 是一個非常輕量的 Web 伺服器,體積小、性能高、速度快等諸多優點。但不足的是也存在缺點,比如其産生的通路日志檔案一直就是一個,不會自動地進行切割,如果通路量很大的話,将導緻日志檔案容量非常大,不便于管理。當然了,我們也不希望看到這麼龐大的一個通路日志檔案,那需要手動對這個檔案進行切割。

在 Linux 平台上 Shell 腳本豐富,使用 Shell 腳本加 crontab 指令能非常友善地進行切割,但在 Windows 平台上就麻煩一些了,剛才弄了好長時間,就在這裡記錄整理一下。

日志檔案切割要求

由于 Nginx 的日志都是寫在一個檔案當中的,是以,我們需要每天零點将前一天的日志存為另外一個檔案,這裡我們就将 Nginx 位于 logs 目錄中的 access.log 存為 access_[yyyy-MM-dd].log 的檔案。其實 logs 目錄中還有個 error.log 的錯誤日志檔案,這個檔案也需要每天切割一個,在這裡就說 access.log 了,error.log 的切割方法類似。

Linux 平台切割

在 Linux 平台上進行切割,需要使用 date 指令以獲得昨天的日期、使用 kill 指令向 Nginx 程序發送重新打開日志檔案的信号,以及 crontab 設定執行任務周期。

先建立一個 Shell 腳本,如下:

Shell代碼 

#!/bin/bash

## 零點執行該腳本

## Nginx 日志檔案所在的目錄

LOGS_PATH=/usr/local/nginx/logs

## 擷取昨天的 yyyy-MM-dd

YESTERDAY=$(date -d ”yesterday” +%Y-%m-%d)

## 移動檔案

mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log

## 向 Nginx 主程序發送 USR1 信号。USR1 信号是重新打開日志檔案

kill -USR1 $(cat /usr/local/nginx/nginx.pid)

上面這個腳本中的最後一行必須向 Nginx 的程序發送 USR1 信号以重新打開日志檔案,如果不寫的話,Nginx 會繼續将日志資訊寫入 access_[yyyy-MM-dd].log 的那個檔案中,這顯然是不正确的。

腳本完成後将其存入 Nginx 安裝目錄的 sbin 中,取名為 cut-log.sh,之後使用 crontab -e 新增一個定時任務,在其中增加執行這個腳本:

0 0 * * * /bin/bash /usr/local/nginx/sbin/cut-log.sh

到這裡 Linux 下切割 Nginx 日志就完成了,可以将 crontab 設定為距目前時較近的時間測試一下,否則在零點出問題就不好了 

Nginx 日志檔案切割

本文章轉自于:傳送門

繼續閱讀