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
命令嘗試修復,或從完整備份中恢復。參考來源: