Nginx:Nginx日志切割方法

Nginx的日志文件是没有切割(rotate)功能的,但是我们可以写一个脚本来自动切割日志文件。

首先我们要注意两点:

1.切割的日志文件是不重名的,所以需要我们自定义名称,一般就是时间日期做文件名。

2.既然是自动切割日志文件,那当然需要定时任务来进行操作,但是这里还涉及一个问题,Nginx的日志是存储在一个文件的,我们要切割就要保证日志数据的完整性,确保得到想要日期的日志信息,这里有一个方法:向Nginx主进程发送USR1信号 ,以重新开启日志的方式记录所需的日志信息。

接下来就是创建脚本:

在Nginx的安装目录下创建nginx_log.sh脚本

# /opt/nginx/ 这是我的nginx安装目录,大家替换成自己的目录
vi /opt/nginx/nginx_log.sh

编写脚本如下:

#!/bin/bash

#设置切割的日志文件存放目录
LOG_HOME="/opt/nginx/logs/"

#设置切割的日志名称(这里用日期时间的命名方式)
LOG_PATH_BAK="$(date -d yesterday +%Y%m%d%H%M)".accesss.log

#开始切割日志文件
mv ${LOG_HOME}/access.log ${LOG_HOME}/${LOG_PATH_BAK}.log

#向nginx主进程发送信号 重新打开记录日志
kill -USR1 `cat /opt/nginx/logs/nginx.pid`

脚本写完了,开始创建定时任务,这里用Linux自带的定时任务管理 crontab 命令

#创建系统定时任务
crontab -e

如下进行编辑:

#一分钟执行一次
*/1 * * * * sh /opt/nginx/nginx_log.sh

这里的Cron表达式设置的是一分钟执行一次,可以根据需要更改。

重启定时任务

service crond restart

接下来就可以等待一分钟看看是否生成日志信息:

Nginx:Nginx日志切割方法

至此完成!

相关推荐