Linux下定时切割Nginx日志并删除指定天数前的日志(2)

生产环境中的服务器,由于访问日志文件增长速度非常快,日志太大会严重影响服务器效率。同时,为了方便对日志进行分析计算,须要对日志文件进行定时切割。定时切割的方式有按月切割、按天切割、按小时切割等。最常用的是按天切割。 
Nginx不支持像Apache 一样使用cronolog来轮转日志,但是可以采用以下方式来实现日志文件的切割: 
mv /usr/local/nginx/logs/access.log /usr/local/nginx/logs/access_20150519084513.log 
 kill -USR1 Nginx主进程号 
通过mv命令将日志文件重命名为/usr/local/nginx/logs/access_20150519084513.log,然后发送kill -USR1信号给Nginx的主进程号,让Nginx重新生成一个新的日志文件/usr/local/nginx/logs/access.log。 
如果想每天定时切割日志,还须要借助crontab。我们可以写一个按天切割的日志,按年、月份目录存放日志的shell脚本: 
[root@localhost logs]# vim /usr/local/nginx/sbin/cut_nginx_log.sh

#!/bin/bash
logs_path="/usr/local/nginx/logs/"
DAYS=30
mv ${logs_path}access.log ${logs_path}access_$(date -d "yesterday" +"%Y%m%d%H%M%S").log
#mv ${logs_path}access.log ${logs_path}access_$(date +"%Y年%m月%d日%H时%M分%S秒星期%w").log
kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`
find ${logs_path} -name "access_*.log" -type f -mtime +$DAYS -exec rm {} \;
[root@localhost logs]# chmod +x /usr/local/nginx/sbin/cut_nginx_log.sh
[root@localhost logs]# crontab -e
0 0 * * * /usr/local/nginx/sbin/cut_nginx_log.sh   
[root@localhost logs]# service crond restart
Stopping crond:                                            [  OK  ]
Starting crond:                                            [  OK  ]
[root@localhost logs]# chkconfig crond on
[root@localhost logs]#

如果脚本在执行过程中出现下面错误
nginx: [error] open() "/usr/local/nginx/logs/nginx.pid" failed

解决办法:
[root@localhost logs]# /usr/local/nginx/sbin/nginx -c /usr/local/nginx/conf/nginx.conf

更多Nginx相关教程见以下内容

CentOS 6.2实战部署Nginx+MySQL+PHP

使用Nginx搭建WEB服务器

搭建基于Linux6.3+Nginx1.2+PHP5+MySQL5.5的Web服务器全过程

CentOS 6.3下Nginx性能调优

CentOS 6.3下配置Nginx加载ngx_pagespeed模块

CentOS 6.4安装配置Nginx+Pcre+php-fpm

Nginx安装配置使用详细笔记

Nginx日志过滤 使用ngx_log_if不记录特定日志

Nginx 的详细介绍请点这里
Nginx 的下载地址请点这里

内容版权声明:除非注明,否则皆为本站原创文章。

转载注明出处:https://www.heiqu.com/c5fb00d322c2f7e581be34ba28806f43.html