zl程序教程

您现在的位置是:首页 >  工具

当前栏目

LNMP详解(十六)——Nginx日志切割

日志Nginx 详解 十六 LNMP 切割
2023-09-14 09:01:44 时间

今天继续给大家介绍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/

来查看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!"

上述脚本的原理与本文第二章介绍基本相同,就是尝试移动Nginx日志,并重启Nginx服务。
上述脚本写完后,我们还要将该脚本放入定时任务中,执行命令:

crontab -e

然后写入如下内容:

0 5 * * * /bin/bash /usr/local/nginx/nginx_log_cut.sh >> /usr/local/nginx/nginx_log_cut.log 2>&1

让该脚本每天5点对日志进行自动切割,这样,该脚本就会在每天5点自动执行,对Nginx日志进行切割了。
原创不易,转载请说明出处:https://blog.csdn.net/weixin_40228200