自动备份(推荐)
/etc/logrotate.d/nginx
,设置每日轮转、保留7天压缩日志,自动触发(依赖cron)。/var/log/nginx/*.log {
daily
rotate 7
compress
missingok
notifempty
create 0640 nginx nginx
postrotate
if [ -f /var/run/nginx.pid ]; then kill -USR1 `cat /var/run/nginx.pid`; fi
endscript
}
crontab
定时执行(如每天凌晨2点),可压缩备份并删除旧文件。#!/bin/bash
BACKUP_DIR="/backup/nginx/logs"
DATE=$(date +%Y%m%d)
mkdir -p $BACKUP_DIR
tar -czvf $BACKUP_DIR/access_$DATE.tar.gz /var/log/nginx/access.log
tar -czvf $BACKUP_DIR/error_$DATE.tar.gz /var/log/nginx/error.log
find $BACKUP_DIR -type f -mtime +7 -exec rm {} \;
手动备份
tar
命令临时备份:sudo tar -czvf nginx_logs_backup.tar.gz /var/log/nginx/
。从备份文件恢复
sudo tar -xzvf nginx_logs_backup.tar.gz -C /var/log/nginx/
。误删日志恢复(未重启Nginx)
lsof
找回被删除文件描述符:sudo lsof | grep deleted
,找到Nginx进程持有的日志文件描述符。/proc/<PID>/fd/
复制文件内容到原路径,重建日志文件后重启Nginx:sudo cp /proc/<PID>/fd/5 /var/log/nginx/access.log
sudo chown nginx:nginx /var/log/nginx/access.log
sudo nginx -s reopen
chown nginx:nginx
),避免权限问题导致服务异常。cron
日志或备份脚本输出确认备份成功,可搭配监控工具(如Prometheus)告警备份失败。参考来源: