要实现Nginx日志的定时备份和删除,可以通过Linux系统的logrotate工具结合cron定时任务来实现。以下是详细配置步骤:
在/etc/logrotate.d/
目录下创建nginx配置文件:
sudo vim /etc/logrotate.d/nginx
添加以下内容(根据实际需求调整):
/var/log/nginx/*.log {
daily # 每天轮转
missingok # 如果日志文件不存在,不报错
rotate 30 # 保留30天的日志
compress # 压缩旧日志
delaycompress # 延迟压缩(压缩前一天的日志)
notifempty # 如果日志为空,不轮转
create 0640 nginx adm # 新日志文件权限和所有者
sharedscripts # 共享脚本
postrotate
if [ -f /var/run/nginx.pid ]; then
kill -USR1 `cat /var/run/nginx.pid` # 通知nginx重新打开日志文件
fi
endscript
}
sudo logrotate -d /etc/logrotate.d/nginx # 测试配置(不实际执行)
sudo logrotate -f /etc/logrotate.d/nginx # 强制执行一次
sudo vim /usr/local/bin/nginx_log_backup.sh
添加以下内容:
#!/bin/bash
# 定义变量
LOG_DIR="/var/log/nginx"
BACKUP_DIR="/var/log/nginx/backups"
DATE=$(date +%Y%m%d)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份日志文件
for logfile in $LOG_DIR/*.log; do
if [ -f "$logfile" ]; then
gzip -c $logfile > $BACKUP_DIR/$(basename $logfile).$DATE.gz
cat /dev/null > $logfile # 清空原日志文件
fi
done
# 删除30天前的备份
find $BACKUP_DIR -name "*.gz" -mtime +30 -exec rm -f {} \;
# 重新加载nginx日志
[ -f /var/run/nginx.pid ] && kill -USR1 $(cat /var/run/nginx.pid)
sudo chmod +x /usr/local/bin/nginx_log_backup.sh
sudo crontab -e
添加以下内容(每天凌晨1点执行):
0 1 * * * /usr/local/bin/nginx_log_backup.sh
grep CRON /var/log/syslog
cat /var/lib/logrotate/status
ls -lh /var/log/nginx/backups
以上配置可以根据实际环境进行调整,确保日志管理既满足需求又不会占用过多存储空间。