分割nginx日志采用的是每天凌晨分割,分为两个步骤:1)把nginx日志另存到对应的年文件夹,月文件夹下,以年月日命名的文件,2)然后让nginx重新生成日志。
例如今天是2013年10月6号,那么晚上的23点59分就开始分割日志,就执行下边的命令,把nginx访问日志access.log移动到指定目录。
1
2
|
[root@localhost ~] # mv /var/log/nginx/access.log /var/log/nginx/bak/2013/10/access_20131006.log
[root@localhost ~] # mv /var/log/nginx/error.log /var/log/nginx/bak/2013/10/error_20131006.log
|
然后再执行下边的命令,让nginx服务器重新生成一份新的日志文件
1
|
kill -USR1 ` cat /var/run/nginx .pid`
|
思路清晰了,就可以把上边的操作写成一个脚本文件,需要时执行一下就好了,下边给出用来分割nginx日志的脚本。
1
2
3
4
5
6
|
#!/bin/bash
log_path= "/var/log/nginx"
mkdir -p $log_path /bak/ $( date +%Y)/$( date +%m)
mv $log_path /access .log $log_path /bak/ $( date +%Y)/$( date +%m) /access_ $( date +%Y%m%d).log
mv $log_path /error .log $log_path /bak/ $( date +%Y)/$( date +%m) /error_ $( date +%Y%m%d).log
kill -USR1 ` cat /var/run/nginx .pid`
|
大致说明一下代码的意义:
第2行声明了一个变量,用来设置nginx的日志路径
第3行新建保存日志的目录,如果目录存在则略过
第4,5行移动nginx的访问日志和错误日志到指定目录下
第6行让nginx重新生成日志文件
这里需要注意:阿里云服务器上安装的是centos系统,其他的linux系统可能需要稍微修改一下,要修改的就两个地方:
1)log_path=
"/var/log/nginx",修改成nginx日志存放的路径
2)
kill
-USR1 `
cat
/var/run/nginx
.pid`,修改成nginx.pid的存放位置,可以看看nginx.conf配置文件,里边应该有类似下边的记录,替换成正确的路径。
1
|
pid /var/run/nginx .pid;
|
最后,我们需要每天晚上23点59分手动执行我们上边写好的脚本?如果可以,别这么做,因为crontab很担心你抢了它的饭碗,我们只需要跟crontab打声招呼,就好了。
1)先检测一下linux系统的crontab服务是否启动
1
|
[root@localhost ~] # /etc/init.d/crond status
|
如果出现类似crond (pid 1889) is running…的提示,说明crontab已经运行了,如果提示crond is stopped,那么就执行下边的命令让它工作。
1
2
|
[root@localhost ~] # /etc/init.d/crond start
Starting crond: [ OK ]
|
2)然后给linux系统的crontab服务添加任务
1
2
|
[root@localhost ~] # crontab -e
59 23 * * * /bin/bash /nginx 分割脚本的路径
|
保存就可以了,从左往右简单的说明一下上边的命令:分钟 小时 日 月 周 执行的命令,星号表示所有时间段。上述的设定之后,linux系统的crontab服务就会在每天的23点59分执行指定的脚本,很方便。
后期可以添加用tar来压缩打包日志的功能,实现起来也很容易,有时间,再更新了。
如需转载请注明: 转载自26点的博客
本文链接地址: linux下nginx日志的优化分割
转载请注明:26点的博客 » linux下nginx日志的优化分割