Nginx日誌按天自動切割

使用Nginx做反向代理,代理了3臺服務器,由於所有的訪問都經過Nginx,發現access日誌增長的很快,時間長了,日誌文件難免會變得很大,打開查看很不方便,而且會影響服務器性能,因此有必要對nginx日誌進行每日切割保存,減小文件大小,同時也更方便查看日誌。

實現思路

shell腳本+定時任務+nginx信號控制,完成日誌定時切割。

具體步驟

在需要保存日誌或者是其他目錄,新建一個shell腳本。

vim /usr/local/openresty/nginx/logs/log_rotate.sh

編輯內容如下:

#!/bin/bash
#安裝目錄下日誌文件
base_log_path='/usr/local/openresty/nginx/logs/access.log'
base_error_path='/usr/local/openresty/nginx/logs/error.log'

#需要保存的目錄位置
log_path='/data_lytdev_dir/nginx/logs/'

#獲取月份
log_month=$(date -d yesterday +"%Y%m")

#獲取前一天日期 (第二天凌晨備份,即保存的日誌就是當天時間的日誌)
log_day=$(date -d yesterday +"%d")

#在指定位置創建文件夾
mkdir -p $log_path/$log_month

#將安裝目錄下的日誌文件,移動到指定存儲位置
mv $base_log_path $log_path/$log_month/access_$log_day.log
mv $base_error_path $log_path/$log_month/error_$log_day.log

#再使用信號控制切割日誌
#USR1 表示nginx信號控制,切割日誌
kill -USR1 `cat /usr/local/openresty/nginx/logs/nginx.pid`


#每天凌晨1點切割日誌
* 1 * * * /usr/local/openresty/nginx/logs/log_rotate.sh

賦予腳本可執行權限:

chmod u+x log_rotate.sh

執行測試:

./log_rotate.sh

發現備份的目錄有日誌文件,並且原來的access.log變的很小,說明腳本執行成功。

圖片

設置定時任務:

crontab -e

添加如下內容:

#每天凌晨1點切割日誌
* 1 * * * /usr/local/openresty/nginx/logs/log_rotate.sh

大功告成,日誌按天自動切割的功能就完成了!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章