Nginx配置文件自动备份与重载

代码脚本 · 部署发布

自动备份Nginx配置文件,测试配置语法,安全重载Nginx服务,支持回滚

详细内容

#!/bin/bash # ========================================== # Nginx配置文件自动备份与重载 # 用途:安全备份、测试、重载Nginx配置 # 使用方法:bash nginx_config_reload.sh # ========================================== NGINX_CONF_DIR="/etc/nginx" BACKUP_DIR="/var/backups/nginx" KEEP_BACKUPS=10 NGINX_BIN=$(which nginx) echo "========== Nginx配置备份与重载 ==========" echo "执行时间: $(date '+%Y-%m-%d %H:%M:%S')" echo "" # 检查Nginx是否安装 if [ -z "$NGINX_BIN" ]; then echo "❌ 错误: Nginx未安装" exit 1 fi # 创建备份目录 mkdir -p "$BACKUP_DIR" # 1. 备份当前配置 echo "【1. 备份当前配置】" BACKUP_NAME="nginx_conf_$(date '+%Y%m%d_%H%M%S').tar.gz" tar -czf "$BACKUP_DIR/$BACKUP_NAME" -C "$(dirname $NGINX_CONF_DIR)" "$(basename $NGINX_CONF_DIR)" 2>/dev/null if [ $? -eq 0 ]; then echo " ✅ 配置已备份: $BACKUP_DIR/$BACKUP_NAME" BACKUP_SIZE=$(du -h "$BACKUP_DIR/$BACKUP_NAME" | awk '{print $1}') echo " 备份大小: $BACKUP_SIZE" else echo " ❌ 配置备份失败" exit 1 fi echo "" # 2. 测试配置语法 echo "【2. 测试配置语法】" if $NGINX_BIN -t 2>&1; then echo " ✅ 配置语法测试通过" else echo " ❌ 配置语法测试失败,已中止重载" echo " 请检查配置文件后重试" exit 1 fi echo "" # 3. 重载Nginx echo "【3. 重载Nginx服务】" if systemctl reload nginx 2>/dev/null || service nginx reload 2>/dev/null; then echo " ✅ Nginx服务已重载" else echo " ⚠️ 无法通过systemctl重载,尝试直接发送信号..." $NGINX_BIN -s reload 2>/dev/null if [ $? -eq 0 ]; then echo " ✅ Nginx已通过信号重载" else echo " ❌ Nginx重载失败" echo " 正在回滚配置..." # 回滚配置 tar -xzf "$BACKUP_DIR/$BACKUP_NAME" -C "$(dirname $NGINX_CONF_DIR)" $NGINX_BIN -s reload 2>/dev/null echo " 配置已回滚,请手动检查" exit 1 fi fi echo "" # 4. 验证Nginx状态 echo "【4. 验证Nginx运行状态】" sleep 1 if $NGINX_BIN -s status 2>/dev/null || pgrep -x nginx > /dev/null; then echo " ✅ Nginx运行正常" # 显示监听端口 echo " 监听端口:" ss -tlnp | grep nginx | awk '{print " " $4}' else echo " ❌ Nginx未运行,请检查" fi echo "" # 5. 清理旧备份 echo "【5. 清理旧备份】" BACKUP_COUNT=$(ls -1 "$BACKUP_DIR"/*.tar.gz 2>/dev/null | wc -l) echo " 当前备份数: $BACKUP_COUNT" if [ "$BACKUP_COUNT" -gt "$KEEP_BACKUPS" ]; then DELETE_COUNT=$((BACKUP_COUNT - KEEP_BACKUPS)) ls -1t "$BACKUP_DIR"/*.tar.gz | tail -n "$DELETE_COUNT" | xargs rm -f echo " 已删除 $DELETE_COUNT 个旧备份(保留最近 $KEEP_BACKUPS 个)" else echo " ✅ 备份数量在范围内,无需清理" fi echo "" echo "========== 操作完成 ==========" echo "备份文件: $BACKUP_DIR/$BACKUP_NAME"

适配环境

适配系统:CentOS 7+,Ubuntu 18.04+,Debian 10+

依赖环境:bash 4.0+

参数说明

[{"name": "NGINX_CONF_DIR", "label": "Nginx\u914d\u7f6e\u76ee\u5f55", "default": "/etc/nginx"}, {"name": "BACKUP_DIR", "label": "\u5907\u4efd\u76ee\u5f55", "default": "/var/backups/nginx"}, {"name": "KEEP_BACKUPS", "label": "\u4fdd\u7559\u5907\u4efd\u6570\u91cf", "default": "10"}]
Nginx配置备份重载部署

更多部署发布