通过shell+crontab实现自动分割nginx日志
最近有几个朋友问这个事情,干脆写出来吧。。
nginx自身不能按天分割日志,因此还是自己动手来吧~
本文提供的这个脚本会把当前的log文件打包为当前日期为文件名的tgz包,并保存到指定目录。
首先把下面的脚本copy保存为/root/daily_logs.sh
#! /bin/bash nginx_app=/home/nginx/sbin/nginx #设置nginx的目录 logs_dir=/data/logs/ #log目录 bak_dir=/data/logs/bak/ #log备份目录 #先把现有的log文件挪到备份目录临时存放 cd $logs_dir echo "moving logs" /bin/mv *.log $bak_dir sleep 3 #重建nginx log echo "rebuild logs" echo "$nginx_app -s reopen" $nginx_app -s reopen #按天打包log文件 echo "begining of tar" cd $bak_dir /bin/tar czf `date +%Y%m%d`.tgz *.log #删除备份目录的临时文件 echo "rm logs" rm -f *.log echo "done"
并添加执行权限:
chmod +x /root/daily_logs.sh
然后增加crontab,这里以每晚0点执行为例:
[root@localhost ~]# crontab -e 0 0 * * * /root/daily-task.sh > /dev/null 2>&1
保存后退出,以后就可以自动分割nginx的日志啦~
收工。。
May 22nd, 2010 at 02:10
[...] 之前在国内用合租主机的时候,服务商都会每天提供日志的压缩备份下载。有时候有什么事,查起来也方便。后来,用上了国外的VPS,而且用的是nginx。上网查了一下,据说Apache是有提供日志分割压缩功能的,但是nginx就没有。后来通过上网搜索,发现方法还是有的,找到《通过shell+crontab实现自动分割nginx日志 》,通过文中的方法,就可以非常简单地对日志进行分割并压缩了。本文对《通过shell+crontab实现自动分割nginx日志 》文章中的方法进行了一点点的修改,主要是给access.log和nginx_error.log两个文件在文件名前面加上日期,方便以后大批量日志解压出来的时候分析使用的。 [...]
September 2nd, 2010 at 17:48
这个方法与网上大多不一样,为什么没有使用reload而是使用了reopen呢?
September 2nd, 2010 at 22:23
reopen信号是重新日志文件,相对reload消耗更小一些。
通过nginx的帮助信息可以看到该参数
[zhys9@localhost c]# /home/nginx/sbin/nginx -h
nginx version: nginx/0.8.49
Usage: nginx [-?hvVt] [-s signal] [-c filename] [-p prefix] [-g directives]
Options:
-?,-h : this help
-v : show version and exit
-V : show version and configure options then exit
-t : test configuration and exit
-s signal : send signal to a master process: stop, quit, reopen, reload
-p prefix : set prefix path (default: /home/nginx/)
-c filename : set configuration file (default: conf/nginx.conf)
-g directives : set global directives out of configuration file