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所有的运行日志都放置在一个文件...

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

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

nginx日志自动分割的完美实现

大家都知道,Nginx ("engine x") 是一个高性能的 HTTP 和 反向代理 服务器,也是一个 IMAP/POP3/SMTP 代理服务器,因它的稳定性、丰富的功能集、示例配置文件和低系统资...

nginx 按天分割日志

nginx默认的日志是统一写到 安装目录的log下的 ,访问日志是 access.log,错误日志是error.log 而且并没有提供一个可配置的地方,对于生产环境,日志都集中在一块儿,没过几天日...
  • lxl631
  • lxl631
  • 2016年05月17日 16:34
  • 883

Linux下nginx日志自动切割

linux平台下nginx日志的自动切割

Nginx日志切割之Logrotate篇

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

Nginx实现大日志文件切割

方式一: nginx cronolog日志分割配置文档,根据下面方法,每分钟分割一次NGINX访问日志。 1.nginx日志配置  access_log access_log /data/acc...

nginx的日志切割

nginx的日志不会每天自动分割日志文件,导致日志文件会越来大,不方便开发人员阅读日志。所以需要对日志进行切割先写一个sh文件,我写在nginx目录下vim /usr/local/nginx/cut_...

Nginx常用日志分割方法

方式一: nginx cronolog日志分割配置文档,根据下面方法,每分钟分割一次NGINX访问日志。 1.nginx日志配置 access_log access_log /data/acces...

Nginx日志每5分钟自动切割

1、Windows下,新建一个Bat文件 2、将以下内容,拷贝到Bta文件:@echo offif “%1” == “h” goto begin mshta vbscript:createobj...
  • zzy5066
  • zzy5066
  • 2017年06月28日 11:57
  • 161
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:nginx 日志文件切割
举报原因:
原因补充:

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