前言
生产环境中的nginx服务器,由于访问日志文件增长快速,这样access_log日志文件过大,会严重影响日志记录性能;同时为了方便对访问日志进行分析,需要对日志进行定时切割。定时切割的方式主要有:按月切割,按天切割,按小时切割等方案,具体切割方案可根据线上服务器访问量来定,一般为按天进行定时切割。
实现步骤
手动实现日志切割步骤如下:1.重命名日志文件;
mv /usr/local/nginx/logs/access_log /usr/local/nginx/logs/access_log_20160625.log
2.使用Nginx的信号控制USR1重新打开日志文件进行写入
kill -USR1 Nginx主进程号
或者
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
定时自动切割日志步骤如下(借助crontab完成):1.编辑需要定时执行的shell脚本(脚本需在每天的1:00执行)
#!/bin/bash
#这个脚本需在每天的1:00执行
#Nginx访问日志文件存放路径变量
nginx_access_log_path="/usr/local/nginx/logs/"
#定义脚本逻辑
mkdir -p ${nginx_access_log_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/
mv ${nginx_access_log_path}nginx.access.log ${nginx_access_log_path}$(date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/nginx.access$(date -d "yesterday" +"%Y%m%d").log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
2.配置crontab定时执行这个脚本
crontab -e
输入以下内容并保存:
#定时每天凌晨1点开始切割前一天的nginx访问日志
0 1 * * * /usr/local/nginx/logs/cut_nginx_log.sh
问题及解决方案
问题1:脚本cut_nginx_log.sh没有执行权限,导致执行失败 |