logrotate工具
/etc/logrotate.d/nginx
实现日志自动轮转、压缩和删除,如每天轮转、保留14天日志、压缩旧日志。/var/log/nginx/*.log {
daily
rotate 14
compress
missingok
create 0640 nginx nginx
postrotate
kill -USR1 `cat /var/run/nginx.pid`
endscript
}
脚本+定时任务
cron
定时执行,支持按日期命名备份文件。#!/bin/bash
LOG_PATH="/var/log/nginx"
BACKUP_PATH="/data/nginx_backup/$(date -d "yesterday" +%F)"
mkdir -p $BACKUP_PATH
tar -czvf $BACKUP_PATH/access_$(date -d "yesterday" +%F).tar.gz $LOG_PATH/access.log
实时同步备份
rsync
或scp
将日志实时同步到远程服务器,避免单点故障。误删恢复(文件未彻底清除)
lsof
命令查找被删除但仍被Nginx进程占用的日志文件描述符,从/proc
目录复制回原路径,然后重启Nginx重新打开日志文件。lsof | grep deleted # 查找被删除的文件描述符
cp /proc/<PID>/fd/<FD> /var/log/nginx/access.log # 复制文件
nginx -s reopen # 重新加载日志文件
从备份恢复
tar -xzvf /backup/access_20250820.tar.gz -C /var/log/nginx/
nginx -s reopen
日志损坏恢复
dd
命令尝试修复,或从完整备份中恢复。参考来源: