温馨提示×

linux怎样备份nginx日志

小樊
41
2026-09-11 13:36:56
栏目: 智能运维

在 Linux 下备份 Nginx 日志,常见做法有手动备份、脚本定时备份、结合 logrotate三种方式。下面按实用程度给你说明。


一、Nginx 日志位置

默认一般在:

/var/log/nginx/access.log
/var/log/nginx/error.log

如果你自定义过,查看:

nginx -T | grep log

二、手动备份(最简单)

cp /var/log/nginx/access.log /backup/nginx/access_$(date +%F).log
cp /var/log/nginx/error.log /backup/nginx/error_$(date +%F).log

三、写脚本 + cron 定时备份(推荐)

1. 创建备份脚本

mkdir -p /backup/nginx
vi /usr/local/bin/nginx_log_backup.sh

内容:

#!/bin/bash
DATE=$(date +%F)
LOG_DIR=/var/log/nginx
BACKUP_DIR=/backup/nginx

mkdir -p $BACKUP_DIR
cp $LOG_DIR/access.log $BACKUP_DIR/access_$DATE.log
cp $LOG_DIR/error.log $BACKUP_DIR/error_$DATE.log

# 可选:只保留 30 天
find $BACKUP_DIR -name "*.log" -mtime +30 -delete

2. 赋予执行权限

chmod +x /usr/local/bin/nginx_log_backup.sh

3. 加入定时任务(每天凌晨 0 点)

crontab -e

添加:

0 0 * * * /usr/local/bin/nginx_log_backup.sh

四、使用 logrotate(最专业,Nginx 自带)

Nginx 通常已集成 logrotate:

/etc/logrotate.d/nginx

示例配置:

/var/log/nginx/*.log {
    daily
    missingok
    rotate 30
    compress
    delaycompress
    notifempty
    create 0640 www-data adm
    sharedscripts
    postrotate
        [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid`
    endscript
}

手动测试:

logrotate -d /etc/logrotate.d/nginx   # 测试
logrotate -f /etc/logrotate.d/nginx   # 强制执行

五、备份后清空当前日志(重要)

不要直接 rm 日志,否则 Nginx 可能继续写旧文件:

> /var/log/nginx/access.log
> /var/log/nginx/error.log

或发信号:

kill -USR1 $(cat /var/run/nginx.pid)

六、远程备份(可选)

rsync -avz /backup/nginx/ user@backup-server:/data/nginx_logs/

如果你告诉我:

  • 系统(CentOS / Ubuntu)
  • 是否用 Docker
  • 是否要压缩 / 上传云

我可以给你更合适的备份方案

0