温馨提示×

怎样备份debian nginx日志

小樊
35
2026-09-01 09:16:21
栏目: 智能运维

在 Debian 上备份 Nginx 日志,常见做法有 手动备份、脚本+定时任务、logrotate 配合归档 几种方式。下面按实用程度给你讲。


一、Nginx 日志在哪里

默认路径一般是:

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

如果你改过配置,查看:

nginx -T | grep -i "access_log\|error_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. 创建备份脚本

sudo nano /usr/local/bin/backup_nginx_logs.sh

内容:

#!/bin/bash
BACKUP_DIR="/backup/nginx"
DATE=$(date +%F)
mkdir -p $BACKUP_DIR

cp /var/log/nginx/access.log $BACKUP_DIR/access-$DATE.log
cp /var/log/nginx/error.log  $BACKUP_DIR/error-$DATE.log

赋予执行权限:

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

2. 加入定时任务

crontab -e

每天凌晨 2 点备份:

0 2 * * * /usr/local/bin/backup_nginx_logs.sh

四、用 logrotate(Debian 默认已配置)

Debian 默认就有:

/etc/logrotate.d/nginx

示例配置(系统自带类似):

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

如果你要备份到别的目录,可以加:

postrotate
    cp /var/log/nginx/access.log /backup/nginx/access-$(date +%F).log
endscript

手动测试:

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

五、压缩 + 远程备份(进阶)

tar czf /backup/nginx-logs-$(date +%F).tar.gz /var/log/nginx/*.log

可配合 rsync / scp 传到备份服务器。


六、注意事项

  • Nginx 日志在写入,备份前最好 kill -USR1 重新打开日志
  • 不要备份正在被 Nginx 占用且未轮转的超大日志
  • 备份目录权限要安全(700

如果你愿意,我可以:

  • 给你一个 自动压缩+保留 30 天 的脚本
  • 或帮你 配置远程备份到另一台服务器

0