自動備份(推薦)
/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)告警備份失敗。參考來源: