方案名 | 简述 |
---|---|
手写sh脚本方案 | 自己手写sh脚本,切割以及删除日志,crontab每晚定时执行 |
logrotate 方案 | 利用Linux自带的logrotate管理日志 |
1.手写sh脚本
- 切割日志脚本
set -e #脚本执行,遇到错就退出,不再往下执行
sleep 1 # 配合定时任务,0 点过一秒再开始切割任务
yesterday=$(date -d 'yesterday' +%Y-%m-%d) #取得服务器当前时间
ng_logs_dir='/var/log/nginx' #nginx 日志文件目录
if [ -d $ng_logs_dir ];then #判断日志目录是否存在
cd $ng_logs_dir
mv access.log access_${yesterday}.log #通过 mv 命令将日志移动到分割后的日志,error 日志我一般不做切割
kill -USR1 $(cat /usr/local/nginx/logs/nginx.pid) #发送 kill -USR1 信号给 Nginx 的主进程号,让 Nginx 重新生成一个新的日志文件
sleep 1
tar -czf access_${yesterday}.log.tar.gz access_${yesterday}.log #把旧的日志打成压缩包
rm -f access_${yesterday}.log #已有压缩包,删除压缩前的日志
else
echo "日志目录不存在,请检查"
exit 0
fi
- 删除最近7天日志脚本
#!/bin/bash
DATE=`date -d "7 day ago" +%Y%m%d`
cd /usr/local/nginx/logs
rm -rf "access.log-$DATE.gz"
配置crontab定时执行
参考:https://www.jiangexing.cn/355.html
2. logrotate 方案
略