Nginx 是一个轻量级的 Web 服务器,体积小、性能高、速度快等诸多优点。但不足的是也存在缺点,比如其产生的访问日志文件一直就是一个,不会自动地进行切割,如果访问量很大的话,将 导致日志文件容量非常大,不便于管理。当然了,我们也不希望看到这么庞大的一个访问日志文件,那需要手动对这个文件进行切割。偶然发现如果不做切割的话,日志文件会越来越大,达到几十G,而且还影响日志的查询效率,现需要将其进行日志分割。
在 Linux 平台上进行切割的原理:使用 date 命令以获得昨天的日期、使用 kill 命令向 Nginx 进程发送重新打开日志文件的信号,以及 crontab 设置执行任务周期。
1,vi /usr/local/nginx/sbin/cut_log.sh
脚本为:
1
2
3
4
5
6
7
|
#!/bin/bash
#date : 2015-11-17
LOGS_PATH=
/data/nginx/log
YESTERDAY=$(
date
--
date
"yesterday"
+
"%Y-%m-%d"
)
#PID_PATH="/usr/local/nginx/logs/nginx.pid"
mv
${LOGS_PATH}
/nginx
.access.log ${LOGS_PATH}
/access_nginx_
${YESTERDAY}.log
kill
-USR1 $(
cat
/usr/local/nginx/logs/nginx
.pid)
|
代码分析:
## Nginx 日志文件所在的目录,根据个人的情况进行修改
LOGS_PATH=/data/nginx/logs
## 获取昨天的日期
YESTERDAY=$(date --date "yesterday" +"%Y-%m-%d")
## 移动文件并命名为新的日志文件
mv ${LOGS_PATH}/nginx.access.log ${LOGS_PATH}/access_nginx_${YESTERDAY}.log
## 向Nginx主进程发送USR1信号,USR1信号是重新打开日志文件
kill -USR1 $(cat /usr/local/nginx/nginx.pid)
##########最简单的备用常用的脚本
1
2
3
4
|
vim cut_nginx.sh
cd
/data/nginx/logs/access
.log &&\
mv
access.log access_$(
date
+%F -d -1day).log
/usr/local/nginx/sbin/nginx
-s reload
|
crontab -e
0 0 * * * /bin/bash /usr/local/nginx/sbin/cut-log.sh
1
2
3
4
5
6
7
8
9
10
11
12
|
####生产:
#! /bin/bash
#Power by guojinbao
date
=`
date
+%Y-%m-%d-%H-%M-%S`
logfile=
"/guojinbao/nginx/logs/access.log"
logdir=
/guojinbao/nginx/logs
pid=`
cat
/usr/local/nginx/logs/nginx
.pid`
if
[ ! -d $logdir ];
then
mkdir
-p $logdir
fi
/bin/mv
$logfile $logdir
/access_
${
date
}.log
kill
-HUP $pid
|
2,chmod +x /usr/local/nginx/sbin/cut_log.sh
3,新增定时任务:
[root@zabbix sbin]# crontab -e
0 0 * * * /bin/bash /usr/local/nginx/sbin/cut-log.sh
~
定时任务是定时到每天的0点0分执行。
4,每天上班的时候就可以查看分割后的日志文件在定制的目录下下。
[root@zabbix log]# ll
total 182456
-rw-r--r-- 1 nobody root 37134 Nov 17 11:27 access_nginx.log_2015-11-16.log
-rw-r--r-- 1 nobody root 963804 Nov 17 14:05 nginx.access.log
以上就完成了对日志文件的切割。
本文转自 lqbyz 51CTO博客,原文链接:http://blog.51cto.com/liqingbiao/1713451