生产环境下为了防止单个日志文件过大,以及日志过大造成日志查询不便,所以,编者在生产环境下将日志文件进行切割,并按时清理周期的日志文件。以减小磁盘空间的压力,提高负责人对日志的查询以及方便日志文件的管理。
详细代码可前往github进行下载:https://github.com/Scirh/Shell-Script/blob/master/Nginx_Cut.sh
#!/bin/bash
# By Scong
# data:2019.01.10
# Nginx 日志目录
Logs_Path=/var/logs/nginx
# 7天前时间戳
Log_Date=$(date -d "yesterday" +%Y%m%d)
# 时间戳
Log_Date=$(date -d "yesterday" +%Y%m%d)
# 进入到 Nginx 日志文件目录下
cd ${Logs_Path}
# 日志数组
arr=(access.log error.log)
# 遍历数组
for file in ${arr[@]}
do
# 切割日志文件
/bin/mv ${Logs_Path}${file} ${Logs_Path}${file}-${Log_Date}
# 压缩日志文件
/bin/gzip ${Logs_Path}${file}-${Log_Date}
# /usr/bin/rm ${Logs_Path}${file}-${day7}
done
# 可以使用“gzip -d xxxx.gz”进行解压
# 向Ngnix主进程发送USR1信号. USR1信号是重新打开日志文件
sudo /usr/bin/kill -USR1 `cat /run/nginx.pid`
# 删除7天的日志文件
find ${Logs_Path} -type f -name '*.gz' -ctime +7 | xargs rm -rf
# find ${Logs_Path} -type f -name '*.gz' -ctime +7 -exec rm -rf {} \;
# 配合Cron定时任务进行每天都日志分割
#0 0 * * * /bin/bash /data/sh/nginx_cut >> /var/logs/nginx_cut.log 2>&1