由於nginx的日志本身只是支持按照server_name或者大小進行划分,對於習慣了apache的按照一個網站每天一個日志的我來說是不可以接受的,所以就實現了按天切割的功能,這篇文章主要介紹了關於Nginx日志按日期切割的相關資料,需要的朋友可以參考下。
實現需求
本文實現的功能是在嗎每天凌晨00:00把前一天的Nginx日志access.log重命名為access-xxxx-xx-xx.log格式,例如:access-2016-10-01.log,下面話不多說了,來看看詳細的實現方法吧。
實現方法
腳本
vim /www/server/nginx/sbin/cut_nginx_log.sh
#!/bin/bash
#此腳本用於自動分割Nginx的日志,包括access.log和error.log
#每天00:00執行此腳本 將前一天的access.log重命名為access-xxxx-xx-xx.log格式,並重新打開日志文件
#Nginx日志文件所在目錄
LOG_PATH=/www/server/nginx/logs/
#獲取昨天的日期
YESTERDAY=$(date -d "yesterday" +%Y-%m-%d)
MONTH=$(date -d "yesterday" +%Y-%m)
if [ ! -d "${LOG_PATH}access_logs" ]; then
mkdir "${LOG_PATH}access_logs"
fi
if [ ! -d "${LOG_PATH}error_logs" ]; then
mkdir "${LOG_PATH}error_logs"
fi
if [ ! -d "${LOG_PATH}access_logs/${MONTH}" ]; then
mkdir "${LOG_PATH}access_logs/${MONTH}"
fi
if [ ! -d "${LOG_PATH}error_logs/${MONTH}" ]; then
mkdir "${LOG_PATH}error_logs/${MONTH}"
fi
#獲取pid文件路徑
PID=/www/server/nginx/logs/nginx.pid
#分割日志
mv ${LOG_PATH}access.log ${LOG_PATH}access_logs/${MONTH}/${YESTERDAY}.log
mv ${LOG_PATH}error.log ${LOG_PATH}error_logs/${MONTH}/${YESTERDAY}.log
#向Nginx主進程發送USR1信號,重新打開日志文件
kill -USR1 `cat ${PID}`
賦予可執行權限:
chmod +x /www/server/nginx/sbin/cut_nginx_log.sh
定時任務
配置crontab每天凌晨00:00定時執行這個腳本
crontab -e # 輸入以下內容並保存 00 00 * * * /bin/bash /www/server/nginx/sbin/cut_nginx_log.sh