今天继续给大家介绍Linux运维相关知识,本文主要内容是Nginx日志切割。
一、Nginx日志切割原因
在企业生产环境中,Nginx的web服务器每天都会产生大量的日志信息,并且Nginx本身不会对访问日志进行切割,这就导致了Nginx日志量不断增大,不利于后期对日志的访问。基于此,我们在生产环境中,需要使用shell脚本+crontab定时任务的方式对Nginx日志进行切割。
二、Nginx日志特性
在进行Nginx切割脚本编写前,我们必须先了解Nginx日志的一些特性。Nginx对于日志的记录,时使用了定位符进行定位,因此,在Nginx启动后,我们即使将Nginx日志移动到其他位置,Nginx本身会向移动后的日志文件继续写入日志信息,而不是严格根据配置文件内容,在日志文件处创建新的日志文件并进行写入。基于这一特性,我们不能编写将Nginx日志不断的移动或者重命名到其他位置的SHELL脚本视图实现Nginx日志切割。
我们可以执行命令:
ll /proc/【Nginx主进程PID】/fd/
1
来查看Nginx的日志标识符,如下所示:
从上图可以看出,该目录下有链接文件,指向的是Nginx的日志位置,我们将Nginx日志移动后,发现链接也会跟着改变,如下所示:
只有将Nginx重新启动后,Nginx日志才会丢失对该日志的定位,并且根据配置文件的内容重新创建Nginx日志。因此,我们在编写Nginx日志切割脚本时,当我们移动Nginx日志后,必须reload重启Nginx服务。
三、Nginx日志切割脚本
最后,根据上述原理,我们编写Nginx日志切割的脚本,如下所示:
!/bin/bash
2022-02-19
writed by pzz
used to cut the nginx log
SOURCE_LOG=/usr/local/nginx/logs/access.log
DESTINATION_LOG=/usr/local/nginx/backup/date +%Y%m%d
echo $DESTINATION_LOG
if [ ! -d $DESTINATION_LOG ];then
mkdir -p $DESTINATION_LOG
fi
mv $SOURCE_LOG $DESTINATION_LOG
/usr/local/nginx/sbin/nginx -s reload
echo "The log of the Nginx has been cut!"
1
2
3
4
5
6
7
8
9
10
11
12
13
14
上述脚本的原理与本文第二章介绍基本相同,就是尝试移动Nginx日志,并重启Nginx服务。
上述脚本写完后,我们还要将该脚本放入定时任务中,执行命令:
crontab -e
1
然后写入如下内容:
0 5 * /bin/bash /usr/local/nginx/nginx_log_cut.sh >> /usr/local/nginx/nginx_log_cut.log 2>&1
1
让该脚本每天5点对日志进行自动切割,这样,该脚本就会在每天5点自动执行,对Nginx日志进行切割了。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200
————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:https://blog.csdn.net/weixin_40228200/article/details/123014142