在配置nginx的时候,默认情况下我们的日志会放到conf目录同级的文件夹logs下。由于nginx在生成日志的时候是按照文件的地址进行append的追加的,所以我们需要按照一定的规则对nginx日志进行切割,切割的好处很显然就是为了更好的查看nginx日志。否则因为日志过大,打开它都是一个问题。下图为nginx日志的一般位置。
nginx日志中包括error和access日志。我们的nginx启动失败或者发送异常都会将日志打印进去。方便我们定位问题。
那么问题是如何切割日志?nginx没有提供相关的功能,所以我们只能采用我们的办法。
1.写shell脚本进行切割,我们写一个定时器,然后在指定的时间上将日志进行备份。
set -e
sleep 1s
yesterday=$(date -d 'yesterday' +%d-%m-%d)
logsdir='/usr/local/nginx/logs'
if [ -d $logsdir ];then
cd $logsdir
mv access.log access_${yesterday}.log
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid)
sleep 2s
tar -czf access_${yesterday}.log.tar.gz access_${yesterday}.log
rm -f access_${yesterday}.log
else
echo 'no log file'
exit 0
fi
这里要注意的一点是,linux和window回车符号不同,所以可能会有脚本执行不了的问题。建议直接在linux环境中编写脚本。
在编写好脚本之后,我们就要写定时任务了,这样就可以定时的去切割日志了。执行crontab进入定时任务编写。
crontab -e
输入定时任务的命令每三秒执行一次日志切割
*/3 * * * * sh /usr/local/nginx/nginx.sh
如图所示为linux定时任务的格式规则。
这里我们按每日进行切割
1 12 * * * sh /usr/local/nginx/nginx.sh
按esc,输入wq回车。保存退出之后。重启定时任务服务
systemctl start crond.service
如此,我们就配置好了nginx日志的定时切割。那么过一段时间,我们就可以看到我们的日志文件被不断的打包为压缩文件了。