Linux定时切割Nginx访问日志并删除指定天数前的日志记录

说明:

操作系统:CentOS

站点1:bbs .111cn.net

站点2:sns .111cn.net

Nginx安装路径:/usr/local/nginx

Nginx配置文件路径:/usr/local/nginx/conf/nginx.conf

站点1配置文件路径:/usr/local/nginx/conf/vhost/bbs.111cn.net.conf

站点2配置文件路径:/usr/local/nginx/conf/vhost/sns.111cn.net.conf

目的:

1、对站点1和站点2的nginx访问日志按天保存,日志路径为:

站点1:/usr/local/nginx/logs/nginx_logs/bbs_logs

站点2:/usr/local/nginx/logs/nginx_logs/sns_logs

2、只保留30天以内的日志记录

具体操作:

1、创建日志存放路径

mkdir -p  /usr/local/nginx/logs/nginx_logs/bbs_logs

mkdir -p  /usr/local/nginx/logs/nginx_logs/sns_logs

2、设置Nginx日志记录格式

vi /usr/local/nginx/conf/nginx.conf  #编辑

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"';

取消日志记录格式前面的注释,在最后添加一行,如下所示:

log_format  main  '$remote_addr - $remote_user [$time_local] "$request" '

'$status $body_bytes_sent "$http_referer" '

'"$http_user_agent" "$http_x_forwarded_for"'

'$http_host $upstream_status $upstream_addr $request_time $upstream_response_time';  #新添加的一行

:wq!  #保存退出

3、设置虚拟主机配置文件

vi /usr/local/nginx/conf/vhost/bbs.111cn.net.conf  #编辑,在bbs.111cn.net;这一行下面添加

access_log  logs/bbs_access.log  main;  #注意这里的main要和上一步中的main一致

:wq!  #保存退出

vi /usr/local/nginx/conf/vhost/sns.111cn.net.conf  #编辑,在sns.111cn.net;这一行下面添加

access_log  logs/sns_access.log  main;  #注意这里的main要和上一步中的main一致

:wq!  #保存退出

系统运维  www.111cn.net  温馨提醒:qihang01原创内容 版权所有,转载请注明出处及原文链接

service nginx reload  #重新加载nginx配置文件

4、创建Nginx日志切割脚本

vi /home/crontab/cut_nginx_log.sh  #编辑

#!/bin/sh

logs_path="/usr/local/nginx/logs/"

DAYS=30

mv ${logs_path}bbs_access.log  ${logs_path}nginx_logs/bbs_logs/bbs_access_$(date -d "yesterday" +"%Y%m%d").log

mv ${logs_path}sns_access.log  ${logs_path}nginx_logs/sns_logs/sns_access_$(date -d "yesterday" +"%Y%m%d").log

kill -USR1 `cat /usr/local/nginx/logs/nginx.pid`

find ${logs_path}nginx_logs/bbs_logs/  -name "bbs_access_*" -type f -mtime +$DAYS -exec rm {} ;

find ${logs_path}nginx_logs/sns_logs/  -name "sns_access_*" -type f -mtime +$DAYS -exec rm {} ;

:wq!  #保存退出

chmod +x /home/crontab/cut_nginx_log.sh  #添加脚本执行权限

5、添加任务计划,修改/etc/crontab

vi /etc/crontab   #在最后一行添加

0 0 * * * root /home/crontab/cut_nginx_log.sh  #表示每天凌晨执行

:wq!  #保存退出

6、重新启动crond使设置生效

/etc/rc.d/init.d/crond restart   #yum install -y vixie-cron安装计划任务,某些系统上可能没有预装

chkconfig crond on #设为开机启动

service crond start #启动

每天会在/usr/local/nginx/logs/nginx_logs/bbs_logs和/usr/local/nginx/logs/nginx_logs/sns_logs

目录下生成类似bbs_access_20140126.log和bbs_access_20140126.log的日志文件

并且只保留最近30天的日志记录

至此,Linux下定时切割Nginx访问日志并删除指定天数前的日志记录完成。

扩展阅读:

========================================================

Nginx访问日志参数说明

192.168.21.1 - - [27/Jan/2014:11:28:53 +0800] "GET /2.php HTTP/1.1" 200 133 "-" "Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1707.0 Safari/537.36" "-"192.168.21.128 200 127.0.0.1:9000 0.119 0.119

$remote_addr:客户端地址  192.168.21.1

$remote_user:客户端用户 -

$time_local:时间和时区   27/Jan/2014:11:28:53 +0800

$request:请求的URL路径和HTTP协议   GET /2.php HTTP/1.1

$status: HTTP状态  200

$body_bytes_sent:发送给客户端页面大小  133

$http_referer:页面跳转来源 -

$http_user_agent:用户访问终端  Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/33.0.1707.0 Safari/537.36

$http_x_forwarded_for:HTTP 代理中,请求端真实IP -

$http_host:用户在浏览器中输入的URL(IP或着域名)地址  192.168.21.128

$upstream_status: upstream状态    200

$upstream_addr: 后端upstream地址及端口  127.0.0.1:9000

$request_time: 页面访问总时间  0.119

$upstream_response_time:页面访问中upstream响应时间   0.119

时间: 2024-10-23 05:49:45

Linux定时切割Nginx访问日志并删除指定天数前的日志记录的相关文章

nginx访问日志并删除指定天数前的日志记录配置方法_nginx

说明: 操作系统:CentOS 站点1:bbs.jb51.net 站点2:sns.jb51.net Nginx安装路径:/usr/local/nginx Nginx配置文件路径:/usr/local/nginx/conf/nginx.conf 站点1配置文件路径:/usr/local/nginx/conf/vhost/bbs.jb51.net.conf 站点2配置文件路径:/usr/local/nginx/conf/vhost/sns.jb51.net.conf 目的: 1.对站点1和站点2的n

Linux下通过脚本自动备份Oracle数据库并删除指定天数前的备份_oracle

说明: Oracle数据库服务器 操作系统:CentOS IP:192.168.0.198 端口:1521 SID:orcl Oracle数据库版本:Oracle11gR2 具体操作: 1.root用户登录服务器 mkdir -p /backup/oracledata #新建Oracle数据库备份目录 chown -R oracle:oinstall /backup/oracledata -R #设置目录权限为oinstall用户组的oracle用户(用户oracle与用户组oinstall是在

CentOS中Mongodb数据库自动备份并删除指定天数前的备份

说明: Mongodb数据库服务器 操作系统:CentOS Mongodb数据库版本:mongodb-linux-x86_64-2.6.x 具体操作: 1.创建Mongodb数据库备份目录 mkdir -p /home/backup/mongod_bak/mongod_bak_now mkdir -p /home/backup/mongod_bak/mongod_bak_list 2.新建Mongodb数据库备份脚本 vi /home/crontab/mongod_bak.sh #新建文件,输入

Windows下通过FTP自动备份数据到服务器并删除指定天数前的备份_win服务器

说明: 1.要备份的文件在D盘根目录下面,以时间命名,(一般我们通过护卫神的好备份软件实现备份)例如 D:\data_db_201112130001.BAK D:\data_db_201112140002.BAK D:\data_db_201112150003.BAK 每天会自动生成一个新的文件,例如2011年12月16号,会自动生成data_db_201112160004.BAK 2.要把D:\下面当天生成的那个数据定时备份到FTP服务器上,例如,今天是2011年12月16号,要把data_d

定时备份mysql, 定时切割nginx access log的方法_Mysql

定时备份mysql 放入 /etc/cron.hourly/ 复制代码 代码如下: #!/bin/bash DUMP=/usr/local/webserver/mysql/bin/mysqldump OUT_DIR=/data1/backup/ DB_NAME=数据库名 DB_USER=数据库用户 DB_PASS=数据库密码 #How much days backup most DAYS=3 #12 hours ago MINS=720 #Core of script cd $OUT_DIR D

批处理bat删除指定天数日期之前的文件夹_DOS/BAT

[方案一]BAT + REG + VBS 复制代码 代码如下: @echo off ::演示:删除指定路径下指定天数之前(以文件夹的最后修改日期为准)的文件夹. ::如果演示结果无误,把rd前面的echo去掉,即可实现真正删除. ::本例调用了临时VBS代码进行日期计算 ::本例为兼容不同的日期格式,调用reg命令(XP系统自带)统一设置日期格式, ::处理完毕之后再把日期格式恢复成原来的状态. rem 指定待删除文件夹的存放路径 set SrcDir=C:/Test rem 指定天数 set

linux中切割Nginx网站日志的例子

为了方便小编找到了一个nginx日志切割脚本,代码如下  代码如下 复制代码 #!/bin/bash #function:cut nginx log files for lnmp v0.5 and v0.6 #author: http://www.111cn.net #set the path to nginx log files log_files_path="/home/wwwlogs/" log_files_dir=${log_files_path}$(date -d "

linux的一个find命令配合rm删除某天前的文件方法_Linux

语句写法:find 对应目录 -mtime +天数 -name "文件名" -exec rm -rf {} \; 例1: 将/usr/local/backups目录下所有10天前带"."的文件删除 find /usr/local/backups -mtime +10 -name "*.*" -exec rm -rf {} \; find:linux的查找命令,用户查找指定条件的文件 /usr/local/backups:想要进行清理的任意目录 -

nginx日志切割及删除7天前的历史日志shell脚本

例子一.按日期切割nginx日志,并自动删除7天前的日志(日志均已同步至专用日志存储服务器,可放心删除历史日志.) #!/bin/bash #初始化 LOGS_PATH=/data/nginx/logs/www.domain.com YESTERDAY=$(date -d "yesterday" +%Y-%m-%d) #按天切割日志 mv ${LOGS_PATH}/access.log ${LOGS_PATH}/access_${YESTERDAY}.log #向 Nginx 主进程发