一般网站的访问日志和错误日志都是打开的,但是nginx的日志都是单个文件,时间长了,文件难免会变得太大,而且会影响服务器性能,因此有必要对nginx日志进行每日切割保存,减小文件大小,同时也更方便查看日志。
实现思路
shell脚本+定时任务+nginx信号控制,完成日志定时切割
具体步骤
在需要保存日志或者是其他目录,新建一个shell脚本。一般shell脚本都是.sh来标识:
1、创建一个文件"touch /root/nginx/logs/savelog.sh",然后使用vim编辑该文件,编辑内容如下:
#标名这个脚本是使用bin目录下bash去执行
#!/bin/bash
#安装目录下日志文件
base_log_path='/www/wwwlogs/xxx.log'
base_error_path='/www/wwwlogs/xxx.error.log'
#需要保存的目录位置
log_path='/www/wwwlogs/xxx/'
#获取月份
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信号控制,切割日志 详见[nginx信号控制](https://blog.csdn.net/weixin_38111957/article/details/81023124)
kill -USR1 `cat /www/server/nginx/logs/nginx.pid`
2、设置定时任务 输入命令"crontab -e"来设置linux定时任务 ,写入设置如下:
#每天凌晨0点切割日志
* 0 * * * /root/nginx/logs/savelog.sh