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"}]