Nginx每天会产生大量的访问日志,而且有些要求保留几个月的日志以便分析,如果不加入自动切割压缩,存储空间很快会被撑爆
下面用shell脚本配合计划任务crontab对nginx日志进行自动切割压缩
vim cut_nginx_log.sh
#!/bin/bash
year=`date +%Y`
month=`date +%m`
day=`date +%d`
rq=`date +%Y%m%d`
pid_path="/software/nginx/logs/nginx.pid"
logs_backup_path="/software/nginx/logs/$year$month"
logs_path="/software/nginx/logs/"
logs_access="1.access.log 2.access.log 3.access.log 4.access.log 5.access.log" #nginx代理多个项目,每个项目日志保存到不同日志文件,所以分开写
[ -d $logs_backup_path ]||mkdir -p $logs_backup_path #按月命名创建文件夹
for i in ${logs_access} #for循环去处理上面每个项目的日志文件
do
mv ${logs_path}${i} ${logs_backup_path}/${i}.${rq} #把日志移到相应月份文件夹去处理
kill -USR1 $(cat /software/nginx/logs/nginx.pid) #根据ng进程号,发个USR1信号重新加载配置创建日志文件,平滑实现不停ng
tar -zcvf ${logs_backup_path}/${i}.${rq}.tar.gz ${logs_backup_path}/${i}.${rq} #压缩日志节省存储空间
rm -rf ${logs_backup_path}/${i}.${rq} #删除处理完的日志
done
echo "Done"
把上面脚本赋予执行权限然后加入计划任务,每天凌晨运行处理
chmod +x cut_nginx_log.sh
crontab -e => 00 00 * * * /bin/bash /software/nginx/logs/cut_nginx_log.sh
crontab -l => 查看计划任务