在 Debian 上备份 Nginx 日志,常见做法有 手动备份、脚本+定时任务、logrotate 配合归档 几种方式。下面按实用程度给你讲。
默认路径一般是:
/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
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
crontab -e
每天凌晨 2 点备份:
0 2 * * * /usr/local/bin/backup_nginx_logs.sh
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 传到备份服务器。
kill -USR1 重新打开日志700)如果你愿意,我可以: