1. 程式人生 > 實用技巧 >nginx 日誌按照日期分割

nginx 日誌按照日期分割

nginx 日誌檔案分割

nginx web 伺服器中 access 日誌,預設是不能按時間分隔的,每次日誌都是打在access.log上,這樣久而久之這個日誌檔案就特別的大,也不利於清理和管理,故此我們肯定是需要做時間上的切割的,那麼如何做到完美的切割的呢?

我們採取的方案是利用shell指令碼和crontab定時任務來做:每天 23:59:59 將日誌取出來並新建檔案,比如:error-2020-07-20.log。

建立shell指令碼 cut_nginx_log.sh

#!/bin/bash
year=`date +%Y`
month=`date +%m`
day=`date +%d`
logs_backup_path="/usr/local/Cellar/nginx/1.15.8/logs"  

logs_path="/usr/local/Cellar/nginx/1.15.8/logs/" 
logs_access="access" 
logs_error="error"
pid_path="/usr/local/etc/nginx/logs/nginx.pid"

[ -d $logs_backup_path ]||mkdir -p $logs_backup_path
rq=`date +%Y_%m_%d`

if [ -f "/usr/local/Cellar/nginx/1.15.8/logs/access.log" ];then
mv ${logs_path}${logs_error}.log ${logs_backup_path}/${logs_error}_${rq}.log
fi

if [ -f "/usr/local/Cellar/nginx/1.15.8/logs/error.log" ];then
mv ${logs_path}${logs_access}.log ${logs_backup_path}/${logs_access}_${rq}.log
fi

# 重新整理 nginx 日誌檔案
kill -USR1 $(cat /usr/local/etc/nginx/logs/nginx.pid)

建立定時任務:

# 每天 23:59:分開始執行
crontab –e 59 23 * * * bash cut_nginx_log.sh