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

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

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