logrotate日志分割时,rotate参数是必须要加的
在logrotate的配置文件中,rotate参数用于指定保留的旧日志文件数量。如果不配置rotate参数,默认是0个,也就是只允许存在一份日志,刚切分出来的日志会马上被删除
logrotate 配置
/usr/local/nginx-24/logs/*.log
{
daily
rotate 180
missingok
copytruncate
nocompress
create
dateext
dateformat -%Y-%m-%d
olddir /usr/local/nginx-24/logs/logbak
sharedscripts
postrotate
/usr/local/nginx-24/compress_targz_nginx_logs.sh
endscript
}
compress_targz_nginx_logs.sh 配置
#!/bin/sh
# 日志目录
BACKUP_DIR="/usr/local/nginx-24/logs/logbak"
# 获取前一天的日期
#YESTERDAY=$(date -d "yesterday" +"%Y-%m-%d")
TODAY=$(date +"%Y-%m-%d")
# 创建备份目录(如果不存在)
mkdir -p $BACKUP_DIR
# 创建 tar.gz 文件
tar -czf $BACKUP_DIR/nginx_logs_$TODAY.tar.gz -C $BACKUP_DIR --exclude='*.gz' access.log-$TODAY error.log-$TODAY
mv $BACKUP_DIR/*.log-$TODAY $BACKUP_DIR/temp
#rm -rf $BACKUP_DIR/*.log-$TODAY
# 切换到包含.tar.gz文件的目录
cd /usr/local/nginx-24/logs/logbak
# 使用ls命令按修改时间排序,然后列出文件名
# 保留最新的180个文件名
# 最后使用xargs rm命令删除这些文件
ls -t *.tar.gz | tail -n +181 | xargs -d '\n' rm -f --