一,需求背景
生产环境中的nginx服务器,由于访问日志文件增长快速,这样access_log日志文件过大,会严重影响日志记录性能;同时为了方便对访问日志进行分析,需要对日志进行定时切割。定时切割的方式主要有:按月切割,按天切割,按小时切割等方案,具体切割方案可根据线上服务器访问量来定,一般为按天进行定时切割。
二,实现步骤
手动操作步骤:
#重命名日志文件 mv /usr/local/nginx/logs/access_log /usr/local/nginx/logs/access_log_20160625.log #使用Nginx的信号控制USR1重新打开日志文件进行写入 kill -USR1 Nginx主进程号 或 kill -USR1 'cat /usr/local/nginx/logs/nginx.pid'
自动操作步骤:需要借助crontab完成
#步骤1:编辑需要定时执行的shell脚本(脚本需在每天的00:00执行) vi /usr/local/nginx/sbin/cut_nginx_log.sh 脚本内容如下: #!/bin/bash #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}access.log ${nginx_access_log_path}${date -d "yesterday" +"%Y")/$(date -d "yesterday" +"%m")/access_$(date -d "yesterday" +"%Y%m%d").log kill -USR1 'cat /usr/local/nginx/log/nginx.pid' #步骤2:配置crontab定时执行这个脚本 crontab -e 输入以下内容并保存: 00 00 * * * /bin/bash /usr/local/nginx/sbin/cut_nginx_log.sh