Nginx 日志文件切割
2014-05-18 22:31
281 查看
Nginx 是一个非常轻量的 Web服务器,体积小、性能高、速度快等诸多优点。但不足的是也存在缺点,比如其产生的访问日志文件一直就是一个,不会自动地进行切割,如果访问量很大的话,将导致日志文件容量非常大,不便于管理。当然了,我们也不希望看到这么庞大的一个访问日志文件,那需要手动对这个文件进行切割。
在 Linux 平台上 Shell 脚本丰富,使用 Shell 脚本加 crontab 命令能非常方便地进行切割,但在 Windows平台上就麻烦一些了,刚才弄了好长时间,就在这里记录整理一下。
日志文件切割要求
由于 Nginx 的日志都是写在一个文件当中的,因此,我们需要每天零点将前一天的日志存为另外一个文件,这里我们就将 Nginx 位于logs 目录中的 access.log 存为 access_[yyyy-MM-dd].log 的文件。其实 logs 目录中还有个error.log 的错误日志文件,这个文件也需要每天切割一个,在这里就说 access.log 了,error.log的切割方法类似。
Linux 平台切割
在 Linux 平台上进行切割,需要使用 date 命令以获得昨天的日期、使用 kill 命令向 Nginx进程发送重新打开日志文件的信号,以及 crontab 设置执行任务周期。
先创建一个 Shell 脚本,如下:
上面这个脚本中的最后一行必须向 Nginx 的进程发送 USR1 信号以重新打开日志文件,如果不写的话,Nginx会继续将日志信息写入 access_[yyyy-MM-dd].log 的那个文件中,这显然是不正确的。
脚本完成后将其存入 Nginx 安装目录的 sbin 中,取名为 cut-log.sh,之后使用 crontab -e新增一个定时任务,在其中增加执行这个脚本:
到这里 Linux 下切割 Nginx 日志就完成了,可以将 crontab设置为距当前时较近的时间测试一下,否则在零点出问题就不好了
。
Windows 平台切割
要在 Windows 平台上做这件事情就有点麻烦了。在 Windows 中没有原生的命令能够获得昨天的日期,Windows中的计划任务设置我感觉也没有 Linux 的 crontab 用得方便,再有批处理命令也没有 Shell脚本功能强大。总之,逐一来解决这些问题吧。
新浪博客上有一篇文章 nginxfor
windows日志切割,但这篇文章有两个不足之处:切割后的日志文件不是以昨天的日期命名;需要停止 Nginx服务。为了切割日志停止服务,我认为有所不值,如果访问量较小的话问题不大,但是访问量较大的话这种做法是非常不可取的。为了弥补这些缺陷,我们对这个批处理文件进行了改进。
要 Windows 平台上使用 Linux 的 date命令以获得昨天的日期,我们可以到 SourceForge上去下载 UnxUtils这个工具。UnxUtils是个非常强大的工具集,将大多数的
Linux 命令都移植到 Windows 平台上来了,比如:ls, grep, wc 等等 120个命令,当然了其中也包括了我们需要的 date 工具。将这个工具解压到一个目录中,假定是d:\common-path\UnxUtils 目录中,将那些工具所在的d:\common-path\UnxUtils\usr\local\wbin 添加到系统的环境变量 PATH 中,可以加到最后去。由于Windows 平台中有 date 内置命令,因此需要将 UnxUtils 的 date.exe 改名为其他的,比如改为udate.exe。用
cmd 打开控制台,输入:
如果能正确输出昨天日期的话,那么这一点我们就搞定了
。
接下来需要写一个批处理文件,假定我们的 Nginx 是放在 d:\httpServer\nginx-0.7.64目录中的,我们就在这个目录中建一个 cut-log.bat 的文件:
在 Linux 平台上 Shell 脚本丰富,使用 Shell 脚本加 crontab 命令能非常方便地进行切割,但在 Windows平台上就麻烦一些了,刚才弄了好长时间,就在这里记录整理一下。
日志文件切割要求
由于 Nginx 的日志都是写在一个文件当中的,因此,我们需要每天零点将前一天的日志存为另外一个文件,这里我们就将 Nginx 位于logs 目录中的 access.log 存为 access_[yyyy-MM-dd].log 的文件。其实 logs 目录中还有个error.log 的错误日志文件,这个文件也需要每天切割一个,在这里就说 access.log 了,error.log的切割方法类似。
Linux 平台切割
在 Linux 平台上进行切割,需要使用 date 命令以获得昨天的日期、使用 kill 命令向 Nginx进程发送重新打开日志文件的信号,以及 crontab 设置执行任务周期。
先创建一个 Shell 脚本,如下:
#!/bin/bash ## 这个脚本须在每天的 00:00运行 ## Nginx 日志文件的存放路径 logsPath=/data/logs/nginx ## 获取昨天的 yyyy-MM-dd cutPath=${logsPath}/$(date -d 'yesterday' +'%Y')/$(date -d 'yesterday' +'%m') ## 创建文件夹 mkdir -p ${cutPath} ## 昨天日期 lastDay=$(date -d last-day +'%d') ## 移动文件 mv ${logsPath}/loveuser.com.log ${cutPath}/loveuser.com${lastDay}.log ## 向 Nginx 主进程发送USR1 信号. USR1 信号是重新打开日志文件 kill -USR1 $(cat /var/run/nginx.pid)
上面这个脚本中的最后一行必须向 Nginx 的进程发送 USR1 信号以重新打开日志文件,如果不写的话,Nginx会继续将日志信息写入 access_[yyyy-MM-dd].log 的那个文件中,这显然是不正确的。
脚本完成后将其存入 Nginx 安装目录的 sbin 中,取名为 cut-log.sh,之后使用 crontab -e新增一个定时任务,在其中增加执行这个脚本:
0 0 * * * /bin/bash /usr/local/nginx/sbin/cut-log.sh
到这里 Linux 下切割 Nginx 日志就完成了,可以将 crontab设置为距当前时较近的时间测试一下,否则在零点出问题就不好了
。
Windows 平台切割
要在 Windows 平台上做这件事情就有点麻烦了。在 Windows 中没有原生的命令能够获得昨天的日期,Windows中的计划任务设置我感觉也没有 Linux 的 crontab 用得方便,再有批处理命令也没有 Shell脚本功能强大。总之,逐一来解决这些问题吧。
新浪博客上有一篇文章 nginxfor
windows日志切割,但这篇文章有两个不足之处:切割后的日志文件不是以昨天的日期命名;需要停止 Nginx服务。为了切割日志停止服务,我认为有所不值,如果访问量较小的话问题不大,但是访问量较大的话这种做法是非常不可取的。为了弥补这些缺陷,我们对这个批处理文件进行了改进。
要 Windows 平台上使用 Linux 的 date命令以获得昨天的日期,我们可以到 SourceForge上去下载 UnxUtils这个工具。UnxUtils是个非常强大的工具集,将大多数的
Linux 命令都移植到 Windows 平台上来了,比如:ls, grep, wc 等等 120个命令,当然了其中也包括了我们需要的 date 工具。将这个工具解压到一个目录中,假定是d:\common-path\UnxUtils 目录中,将那些工具所在的d:\common-path\UnxUtils\usr\local\wbin 添加到系统的环境变量 PATH 中,可以加到最后去。由于Windows 平台中有 date 内置命令,因此需要将 UnxUtils 的 date.exe 改名为其他的,比如改为udate.exe。用
cmd 打开控制台,输入:
D:\>udate -d "yesterday" +%Y-%m-%d 2010-05-31 D:\>_
如果能正确输出昨天日期的话,那么这一点我们就搞定了
。
接下来需要写一个批处理文件,假定我们的 Nginx 是放在 d:\httpServer\nginx-0.7.64目录中的,我们就在这个目录中建一个 cut-log.bat 的文件:
相关文章推荐
- nginx日志切割(把同一天生成的不同域名的日志文件放在统一个文件夹下)
- Nginx 日志文件切割
- nginx 日志文件切割
- Nginx日志文件的切割
- Nginx实现大日志文件切割
- nginx日志切割(把同一个域名的日志文件放在同一个文件夹下)
- Nginx日志文件配置与切割
- Nginx日志文件配置与切割
- nginx日志文件切割
- Nginx日志文件切割
- Nginx 日志文件切割
- Nginx 日志文件切割
- Nginx 日志文件切割
- NGINX 日志文件切割及管理
- Nginx实现大日志文件切割
- nginx自动切割日志访问文件脚本
- Nginx 日志文件切割
- Nginx 日志文件切割
- nginx日志切割(文件数特别多的情况下)
- Nginx日志文件配置与切割