阅读量:3
一、CentOS Nginx日志备份方法
1. 使用logrotate工具(系统自带,自动化推荐)
logrotate是Linux系统自带的日志管理工具,可定期轮转、压缩、删除Nginx日志,配置简单且支持自动化。
配置步骤:
- 编辑logrotate配置文件:
sudo vim /etc/logrotate.d/nginx,添加以下内容(按需调整参数):/var/log/nginx/*.log { daily # 每天轮转(可选:weekly/monthly) rotate 30 # 保留30份旧日志(可根据磁盘空间调整) compress # 压缩旧日志(节省空间) delaycompress # 延迟压缩(如第30份不压缩,减少IO) missingok # 忽略缺失的日志文件(避免报错) notifempty # 日志为空时不轮转 create 0644 nginx nginx # 轮转后创建新日志,权限644,属主nginx sharedscripts # 所有日志处理完成后执行postrotate postrotate [ -f /var/run/nginx.pid ] && kill -USR1 `cat /var/run/nginx.pid` # 发送信号让Nginx重新打开日志文件 endscript } - 测试配置有效性:
sudo logrotate -d /etc/logrotate.d/nginx(模拟运行,查看是否有错误); - 手动触发轮转:
sudo logrotate -f /etc/logrotate.d/nginx(强制立即执行); - 默认情况下,logrotate会通过系统cron(
/etc/cron.daily/logrotate)每天自动执行。
2. 编写Shell脚本+crontab(灵活定制)
若需要更灵活的备份策略(如备份到远程服务器、按日期命名),可通过Shell脚本结合crontab实现。
脚本示例(/usr/local/bin/nginx_log_backup.sh):
#!/bin/bash
# 定义变量
BACKUP_DIR="/backup/nginx/logs" # 备份目录
LOG_DIR="/var/log/nginx" # Nginx日志目录
DATE=$(date +%Y%m%d) # 当前日期(格式:20250930)
TIMESTAMP=$(date +%Y%m%d%H%M) # 完整时间戳(格式:202509301200)
# 创建备份目录
mkdir -p $BACKUP_DIR
# 备份access.log和error.log(压缩并重命名)
tar -czvf $BACKUP_DIR/access_$DATE.tar.gz $LOG_DIR/access.log
tar -czvf $BACKUP_DIR/error_$DATE.tar.gz $LOG_DIR/error.log
# 删除7天前的备份(保留近7天)
find $BACKUP_DIR -name "*.tar.gz" -mtime +7 -exec rm -f {} \;
# 可选:远程同步到备份服务器(需配置SSH免密)
# rsync -avz $BACKUP_DIR/ backupuser@192.168.1.100:/remote/backup/nginx/
设置crontab定时任务:
- 编辑root用户的crontab:
sudo crontab -e,添加以下内容(每天凌晨2点执行):0 2 * * * /usr/local/bin/nginx_log_backup.sh >> /var/log/nginx_backup.log 2>&1 - 赋予脚本执行权限:
sudo chmod +x /usr/local/bin/nginx_log_backup.sh。
3. 实时日志备份(可选,适合高可用场景)
若需要实时将日志传输到远程服务器(如ELK、S3),可使用Fluentd、Filebeat等日志采集工具。
以Filebeat为例:
- 安装Filebeat:
sudo yum install filebeat -y; - 配置Filebeat(
/etc/filebeat/filebeat.yml):filebeat.inputs: - type: log enabled: true paths: - /var/log/nginx/access.log - /var/log/nginx/error.log output.logstash: hosts: ["logstash-server:5044"] # 替换为Logstash服务器地址 - 启动Filebeat:
sudo systemctl start filebeat。
二、CentOS Nginx日志恢复方法
1. 从备份中恢复(常规方法)
若日志已通过上述方法备份,可直接从备份文件中恢复:
- 解压备份文件到原日志目录(以
access_20250930.tar.gz为例):tar -xzvf /backup/nginx/logs/access_20250930.tar.gz -C /var/log/nginx/ - 重启Nginx以重新打开日志文件(避免日志继续写入旧文件):
sudo systemctl restart nginx - 验证恢复结果:
tail -f /var/log/nginx/access.log。
2. 使用lsof恢复误删除日志(紧急情况)
若日志文件被误删除(如rm -f /var/log/nginx/access.log),且Nginx进程仍在运行,可通过lsof工具恢复未释放的文件句柄。
操作步骤:
- 确认Nginx进程运行状态:
systemctl status nginx(若未运行,先启动:systemctl start nginx); - 查找被删除的日志文件描述符:
输出示例:sudo lsof | grep /var/log/nginx/access.log | grep deleted
(关键信息:进程IDnginx 1439 root 5w REG 253,0 1524 17117944 /var/log/nginx/access.log (deleted)1439,文件描述符5,文件大小1524字节); - 从/proc目录恢复文件内容:
sudo cp /proc/1439/fd/5 /tmp/access.log.bak # 复制到临时目录 - 验证恢复的文件:
head -n 5 /tmp/access.log.bak(查看前5行是否正常); - 重新创建日志文件并修复权限:
sudo touch /var/log/nginx/access.log sudo chown nginx:nginx /var/log/nginx/access.log # 确保属主为nginx用户 - 让Nginx重新加载日志文件(不中断服务):
sudo nginx -s reopen - 清理临时文件:
rm -f /tmp/access.log.bak。
3. 注意事项
- 预防误删:可通过
chattr +a命令设置日志文件为不可删除(仅root可修改):
验证属性:sudo chattr +a /var/log/nginx/access.loglsattr /var/log/nginx/access.log(输出包含a标记); - 监控备份:定期检查备份目录的磁盘空间(
df -h /backup)和备份文件的完整性(tar -tzvf backup.tar.gz); - 测试恢复:定期模拟恢复流程(如从备份中解压日志到临时目录,验证内容是否正确),确保备份有效。
以上就是关于“CentOS nginx日志备份与恢复方法”的相关介绍,筋斗云是国内较早的云主机应用的服务商,拥有10余年行业经验,提供丰富的云服务器、租用服务器等相关产品服务。云服务器资源弹性伸缩,主机vCPU、内存性能强悍、超高I/O速度、故障秒级恢复;电子化备案,提交快速,专业团队7×24小时服务支持!
简单好用、高性价比云服务器租用链接:https://www.jindouyun.cn/product/cvm