服务器优化之分割nginx日志的解决方案
[文章作者:磨延城 转载请注明原文出处: https://mo2g.com/view/54/ ]
以前就看过维护nginx服务器的相关资料,但因为各种各样的原因,迟迟没有动手实践.正好趁着国庆有时间,就看了看磨途歌的阿里云服务器相关配置与程序运行状态,才发现nginx的访问日志文件已经达到了543MB,错误日志也有172MB了,还好目前磨途歌的访问量不大,如果再偷懒一点,那就棘手了.
以前就看过很多关于linux系统维护的相关资料,如centos安装、配置、维护nginx服务器,但因为各种各样的原因,迟迟没有动手实践。正好趁着国庆有时间,就看了看磨途歌的阿里云服务器相关配置与程序运行状态,才发现nginx的访问日志文件已经达到了543MB,错误日志也有172MB了,还好目前磨途歌的访问量不大,如果再偷懒一点,那就棘手了。
当务之急就是确定分割nginx日志的解决方案,是按月分割,还是按日分割?最后还是采用了常用的分割方案:每天凌晨,执行两个步骤,1)把nginx日志另存到对应的年文件夹,月文件夹下,以年月日命名的文件,2)然后让nginx重新生成日志。
例如今天是2013年10月6号,那么晚上的23点59分就开始分割日志,就执行下边的命令,把nginx访问日志access.log移动到指定目录。
[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服务器重新生成一份新的日志文件
kill -USR1 `cat /var/run/nginx.pid`
思路清晰了,就可以把上边的操作写成一个脚本文件,需要时执行一下就好了,下边给出磨途歌用来分割nginx日志的脚本。
#!/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配置文件,里边应该有类似下边的记录,替换成正确的路径。
pid /var/run/nginx.pid;
最后,我们需要每天晚上23点59分手动执行我们上边写好的脚本?如果可以,别这么做,因为crontab很担心你抢了它的饭碗,我们只需要跟crontab打声招呼,就好了。
1)先检测一下linux系统的crontab服务是否启动
[root@localhost ~]# /etc/init.d/crond status
如果出现类似crond (pid 1889) is running...的提示,说明crontab已经运行了,如果提示crond is stopped,那么就执行下边的命令让它工作。
[root@localhost ~]# /etc/init.d/crond start Starting crond: [ OK ]
2)然后给linux系统的crontab服务添加任务
[root@localhost ~]# crontab -e 59 23 * * * /bin/bash /nginx分割脚本的路径
保存就可以了,从左往右简单的说明一下上边的命令:分钟 小时 日 月 周 执行的命令,星号表示所有时间段。上述的设定之后,linux系统的crontab服务就会在每天的23点59分执行指定的脚本,很方便。
后期可以添加用tar来压缩打包日志的功能,实现起来也很容易,有时间,再更新了。
我来说两句: