nginx 日志文件切割

原创 2015年11月17日 18:46:37

偶然发现access.log有21G大,所以将其切割。

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 脚本,如下:

Shell代码 
#!/bin/bash
## 零点执行该脚本
## Nginx 日志文件所在的目录
LOGS_PATH=/usr/local/nginx/logs
## 获取昨天的 yyyy-MM-dd
YESTERDAY=$(date -d ”yesterday” +%Y-%m-%d)
## 移动文件
mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log
## 让nginx重新向access.log写入日志
/opt/nginx-1.8.0/sbin/nginx -s reopen

上面这个脚本中的最后一行必须向 Nginx 的进程发送 USR1 信号以重新打开日志文件,如果不写的话,Nginx 会继续将日志信息写入 access_[yyyy-MM-dd].log 的那个文件中,这显然是不正确的。

脚本完成后将其存入 Nginx 安装目录的 sbin 中,取名为 cut-log.sh,之后使用 crontab -e(打开系统定时任务配置文件) 新增一个定时任务,在其中增加执行这个脚本:

Shell代码 
  1. 0 0 * * * /bin/bash /usr/local/nginx/sbin/cut-log.sh

到这里 Linux 下切割 Nginx 日志就完成了,可以将 crontab 设置为距当前时较近的时间测试一下,否则在零点出问题就不好了 

如果你定的是*/5 * * * *,每5分钟执行一次,但是到时间了没有执行,就要去查下crontab是否执行完,具体方式参考:http://jingyan.baidu.com/article/73c3ce28e7b298e50343d925.html

主要就两个:1.查看日志:tail -f /var/log/cron;2.查看系统邮件:tail -f /var/spool/mail/root

重启crontab命令:

1.在系统中有service这个命令时:
这个命令在red hat当中常用,有的linux发行版本中没有这个命令.
$ service crond start //启动服务
$ service crond stop //关闭服务
$ service crond restart //重启服务

2.linux发行版本没有service这个命令时:
/etc/init.d/cron stop
/etc/init.d/cron start

版权声明:本文为博主原创文章,未经博主允许不得转载。

Nginx运行日志自动切割

所谓自动分割Nginx日志文件,就是指Rotate Nginx log files,即让Nginx每天(或每个星期,可自定义控制)生成一个日志文件,而不是将Nginx所有的运行日志都放置在一个文件...
  • wangkai_123456
  • wangkai_123456
  • 2017年05月01日 16:57
  • 4230

Nginx实战(三) 日志配置与切割

访问日志主要记录客户端访问Nginx的每一个请求,格式可以自定义。通过访问日志,你可以得到用户地域来源、跳转来源、使用终端、某个URL访问量等相关信息。 Nginx中访问日志相关指令主要有两条,...
  • u012486840
  • u012486840
  • 2016年10月11日 13:31
  • 5228

nginx日志分割(log rotation)

nginx没有内置日志分割功能,容易造成日志累积,文件越来越大。必须借助于外部命令或者工具来分割日志。 本文介绍通过几条命令来分割日志。 日志分割脚本 将实现分割日志的脚本放在/usr/lo...
  • dreamer2020
  • dreamer2020
  • 2016年12月27日 22:29
  • 997

nginx自动切割访问日志

Web 访问日志 (access_log) 记录了所有外部客户端对Web服务器的访问行为,包含了客户端IP,访问日期,访问的URL资源,服务器返回的HTTP状态码等重要信息。 一条典型的Web访问日...
  • xiaoyu411502
  • xiaoyu411502
  • 2016年04月04日 12:28
  • 1306

Nginx日志每5分钟自动切割

1、Windows下,新建一个Bat文件 2、将以下内容,拷贝到Bta文件:@echo offif “%1” == “h” goto begin mshta vbscript:createobj...
  • zzy5066
  • zzy5066
  • 2017年06月28日 11:57
  • 243

使用 logrotate 进行 nginx 日志分割

使用logrotate指令,可让你轻松管理系统所产生的记录文件。它提供自动替换,压缩,删除和邮寄记录文件,每个记录文件都可被设置成每日,每周或每月处理,也能在文件太大时立即处理。您必须自行编辑,指定配...
  • Gekkoou
  • Gekkoou
  • 2016年03月24日 15:45
  • 2533

Nginx之——日志按日期分割的实现(基于CentOS操作系统)

Nginx是没有以日期格式作为文件名来存储的,也就是说,Nginx不像Tomcat,每天自动生成一个日期文件,所有的日志都是以一个名字来存储,时间久了日志文件会变得很大。这样非常不利于分析。虽然ngi...
  • l1028386804
  • l1028386804
  • 2017年12月12日 20:42
  • 311

Nginx日志切割之Logrotate篇

Nginx日志切割之Logrotate篇知识管理部 孙磊      Logrotate是Linux下一款日志管理工具,可用于日志文件的转储(即删除旧日志文件,创建新日志文件)。可以根据日志大小或...
  • forthemyth
  • forthemyth
  • 2015年03月04日 17:00
  • 7800

Linux下nginx日志自动切割

linux平台下nginx日志的自动切割
  • allus0918
  • allus0918
  • 2016年01月07日 17:52
  • 1242

nginx日志分割(linux)

默认情况下,nginx是不分割访问日志的。 当网站的日志文件将会越来越大,占用空间不说,如果有问题要查看网站的日志的话,庞大的文件也将很难打开。 可以借助本文分享的这段nginx日志分割脚本,...
  • vip_linux
  • vip_linux
  • 2013年11月25日 16:46
  • 534
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:nginx 日志文件切割
举报原因:
原因补充:

(最多只允许输入30个字)