Nginx分割日志文件
简介Nginx作为使用量非常大的Web服务器,但是如果遇到一个访问量比较大的网站,其访问日志会快速的进行增长,如果一直将所有的访问日志存放在一个文件中肯定是不对的,所以我们就需要对访问量大的访问日志进行分割,然后按照一定的时间删除不需要的日志文件。
使用nginx作为我们的WEB服务器时,如果我们开启了访问日志,当访问量非常大的时候,访问日志会快速增长,可能在服务器存储空间较小的情况下导致服务器磁盘占用过多或占满,所以就需要我们定期对nginx日志进行清理。
这里的思路主要是将每天的日志生成一个新的文件,然后给定一个保存时间,当过了我们保存时间后就删除以前没用的数据。
1、首先要开启nginx的访问日志
#这里我们可以进行自定义格式,这里我主要使用nginx定义好的格式
log_format main '$remote_addr - $remote_user [$time_local] "$request" '
'$status $body_bytes_sent "$http_referer" '
'"$http_user_agent" "$http_x_forwarded_for"';
#存放文件路径和名称,access这个名字可以修改,但是在后面需要用到
access_log logs/access.log main;
2、日志分割脚本
在nginx目录下编写一个cut_nginx_log.sh文件,内容如下:
#!/bin/bash
#定义日志目录,需要根据自己的日志目录进行修改
log_files_dir="/apps/nginx/logs/"
#定义日志文件名称,根据nginx配置的文件名称进行修改
log_files_name=(access )
#获取日志名称数量
log_files_count=${#log_files_name[@]}
#定义nginx命令地址,需要根据自己的nginx安装路径来找到该路径
nginx_sbin="/apps/nginx/sbin/nginx"
#设置保存天数,自定义
save_days=30
#分割日志
for((i=0;i<$log_files_count;i++));do
mv ${log_files_dir}${log_files_name[i]}.log ${log_files_dir}${log_files_name[i]}.log_$(date -d "yesterday" +"%Y-%m-%d")
done
#找到保存天数以前的日志并删除,这里最好要加上*.log来进行查找
find $log_files_dir -name *.log_* -mtime +$save_days -exec rm -rf {} \;
#重启nginx
$nginx_sbin -s reload
保存完后,需要将该文件改成可以执行的权限
chmod +x cut_nginx_log.sh
3、添加定义任务
#打开定义任务
crontab -e
#进入编辑模式在后面添加,定时任务
00 00 * * * /bin/sh /apps/nginx/cut_nginx_logs.sh
#查看刚刚添加的定时任务
crontab -l
4、查询定时任务是否执行
tail -f /var/log/cron
这里一定要注意shell文件中的文件路径,一定要使用绝对路径。