Files
weiyu/plugins/freeswitch/one_click_fix.sh
jack ning 5874d00121 update
2025-06-08 14:53:38 +08:00

114 lines
3.5 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/bin/bash
# FreeSwitch ESL 一键修复脚本 - 请在FreeSwitch服务器上执行
echo "=== FreeSwitch ESL 一键修复脚本 ==="
echo "开始时间: $(date)"
# 1. 查找配置文件位置
echo "步骤1: 查找配置文件..."
CONFIG_PATHS=$(find /etc /usr/local /opt /var -name "event_socket.conf.xml" -type f 2>/dev/null)
echo "找到的配置文件位置:"
echo "$CONFIG_PATHS"
# 2. 尝试常见路径
COMMON_PATHS=(
"/usr/local/freeswitch/conf/autoload_configs/event_socket.conf.xml"
"/etc/freeswitch/autoload_configs/event_socket.conf.xml"
"/opt/freeswitch/conf/autoload_configs/event_socket.conf.xml"
)
CONFIG_FILE=""
for path in "${COMMON_PATHS[@]}"; do
if [[ -f "$path" ]]; then
CONFIG_FILE="$path"
echo "使用配置文件: $CONFIG_FILE"
break
fi
done
if [[ -z "$CONFIG_FILE" && -n "$CONFIG_PATHS" ]]; then
CONFIG_FILE=$(echo "$CONFIG_PATHS" | head -1)
echo "使用第一个找到的配置文件: $CONFIG_FILE"
fi
if [[ -z "$CONFIG_FILE" ]]; then
echo "❌ 错误: 未找到event_socket.conf.xml配置文件"
echo "请手动指定配置文件路径"
exit 1
fi
# 3. 备份原配置
echo "步骤2: 备份原配置..."
BACKUP_FILE="/tmp/event_socket.conf.xml.backup.$(date +%Y%m%d_%H%M%S)"
cp "$CONFIG_FILE" "$BACKUP_FILE"
echo "✅ 已备份到: $BACKUP_FILE"
# 4. 创建新配置
echo "步骤3: 创建新配置..."
cat > "$CONFIG_FILE" << 'EOF'
<configuration name="event_socket.conf" description="Socket Client">
<settings>
<param name="nat-map" value="false"/>
<param name="listen-ip" value="0.0.0.0"/>
<param name="listen-port" value="8021"/>
<param name="password" value="bytedesk123"/>
<!-- ACL限制已移除 - 解决连接问题 -->
<!-- <param name="apply-inbound-acl" value="loopback.auto"/> -->
<!-- <param name="apply-inbound-acl" value="lan"/> -->
</settings>
</configuration>
EOF
echo "✅ 新配置已创建"
# 5. 重启FreeSwitch
echo "步骤4: 重启FreeSwitch服务..."
if command -v systemctl &> /dev/null; then
systemctl restart freeswitch && echo "✅ systemctl重启成功" || echo "❌ systemctl重启失败"
elif command -v service &> /dev/null; then
service freeswitch restart && echo "✅ service重启成功" || echo "❌ service重启失败"
else
echo "⚠️ 无法自动重启请手动重启FreeSwitch"
fi
# 6. 等待服务启动
echo "步骤5: 等待服务启动..."
sleep 5
# 7. 验证修复
echo "步骤6: 验证修复..."
# 检查端口监听
if netstat -tlnp 2>/dev/null | grep -q ":8021.*LISTEN" || ss -tlnp 2>/dev/null | grep -q ":8021.*LISTEN"; then
echo "✅ 端口8021正在监听"
else
echo "❌ 端口8021未在监听"
fi
# 检查进程
if pgrep freeswitch > /dev/null; then
echo "✅ FreeSwitch进程运行中"
else
echo "❌ FreeSwitch进程未运行"
fi
# 测试连接
echo "步骤7: 测试ESL连接..."
RESPONSE=$(timeout 3 bash -c "echo '' | nc localhost 8021" 2>/dev/null || echo "连接失败")
if echo "$RESPONSE" | grep -q "auth/request"; then
echo "✅ ESL连接测试成功 - 收到认证请求"
elif echo "$RESPONSE" | grep -q "rude-rejection"; then
echo "❌ 仍然收到rude-rejection错误"
echo "建议: 检查是否有其他配置文件或重启系统"
else
echo "⚠️ 连接响应: $RESPONSE"
fi
echo ""
echo "=== 修复完成 ==="
echo "请从客户端测试连接: telnet $(hostname -I | awk '{print $1}') 8021"
echo "配置备份位置: $BACKUP_FILE"
echo "如需恢复: cp $BACKUP_FILE $CONFIG_FILE && systemctl restart freeswitch"