服务器之家

专注于服务器技术!
当前位置:首页 > Web服务器 > Nginx

Linux系统定时切割Nginx访问日志并只保留一定天数的日志

发布时间:2016-07-26 来源:服务器之家

说明:

操作系统:CentOS

站点1:bbs.osyunwei.com

站点2:sns.osyunwei.com

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

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

站点1配置文件路径:/usr/local/nginx/conf/vhost/bbs.osyunwei.com.conf

站点2配置文件路径:/usr/local/nginx/conf/vhost/sns.osyunwei.com.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.osyunwei.com.conf  #编辑,在bbs.osyunwei.com;这一行下面添加

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

:wq!  #保存退出

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

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

:wq!  #保存退出

系统运维  www.osyunwei.com  温馨提醒: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: [error] open() "/usr/local/nginx/logs/nginx.pid" failed

解决办法:

/usr/local/nginx/sbin/nginx -c  /usr/local/nginx/conf/nginx.conf

#使用nginx -c的参数指定nginx.conf文件的位置