JUN

切割Nginx日志文件
以前用Apache的时候有自带个叫rotatelogs的工具,只需要修改httpd.conf文件就可以轻松简单分割...
扫描右侧二维码阅读全文
27
2014/07

切割Nginx日志文件

以前用Apache的时候有自带个叫rotatelogs的工具,只需要修改httpd.conf文件就可以轻松简单分割日志文件。
不过Nginx并没有自带这样的工具,还需要写脚本用crontab执行。

#!/bin/bash
#设置日志文件目录
logs_path="/home/wwwlogs/"
#设置pid文件
pid_path="/usr/local/nginx/logs/nginx.pid"

#重命名日志文件
mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d").log

#向nginx主进程发信号重新打开日志
kill -USR1 `cat ${pid_path}`

其中日志文件目录和pid目录请根据自已的情况更改,pid文件存放的目录打开nginx.conf就可以看到了。

平常kill命令经常拿来杀进程,在这里用了个-USR1参数,在网上查了一下,有这样一段说明:

USR1亦通常被用来告知应用程序重载配置文件;例如,向HTTP服务器发送一个USR1信号将导致以下步骤的发生:停止接受新的连接,等待当前连接停止,重新载入配置文件,重新打开日志文件,重启服务器,从而实现相对平滑的不关机的更改。

真素打开了新世界的大门

最后把上面那段脚本保存,比如我们存在/usr/local/nginx/rotatelogs.sh
然后设置每天凌晨12点执行这段脚本:

0 0 * * * bash /usr/local/nginx/rotatelogs.sh

如果你有多个网站,多个日志的话,在重命名日志文件那里多加相应的几个进去就可以了。
像博主这样VPS没有默认安装crontab的,可以yum install crontabs。
然后再使用crontab -e命令进行脚本的添加。
一般来说都会打开一个vi编辑器,具体就请参照vi编辑器的用法啦。

补充:
在crontab中%是有特殊含义的,表示换行的意思。如果要用的话必须进行转义%,如经常用的date ‘+%Y%m%d’在crontab里是不会执行的,应该换成date ‘+%Y%m%d’。
我们的脚本里也有类似的表示日期的,不过不是直接写在crontab里就不用考虑转义了。

参考:
http://www.nginx.cn/255.html
http://www.cnblogs.com/liuguanghuiyes/archive/2012/11/07/2758739.html[/info]

Last modification:February 20th, 2018 at 12:42 am
If you think my article is useful to you, please feel free to appreciate

4 comments

  1. kylin

    centos系统下面有logrotate工具……服务日志都可以切割0.0

    1. JUN
      @kylin

      学习了!

  2. claude

    good

  3. Marc

    非常感谢!

Leave a Comment