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

167 lines
4.9 KiB
Bash
Executable File
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 连接诊断和修复助手 (本地执行)
# 提供详细的诊断信息和修复建议
echo "======================================="
echo " FreeSwitch ESL 连接诊断助手"
echo "======================================="
echo "诊断时间: $(date)"
echo "目标服务器: 14.103.165.199:8021"
echo ""
# 1. 基础网络连通性测试
echo "🔍 步骤1: 基础网络连通性测试"
echo "----------------------------------------"
if ping -c 3 14.103.165.199 > /dev/null 2>&1; then
echo "✅ 服务器网络可达"
else
echo "❌ 服务器网络不可达"
echo " 请检查网络连接和服务器状态"
exit 1
fi
# 2. 端口连通性测试
echo ""
echo "🔍 步骤2: 端口连通性测试"
echo "----------------------------------------"
if timeout 5 bash -c "</dev/tcp/14.103.165.199/8021" 2>/dev/null; then
echo "✅ 端口8021可以连接"
else
echo "❌ 端口8021无法连接"
echo " 可能原因:"
echo " - FreeSwitch服务未运行"
echo " - 防火墙阻止了8021端口"
echo " - 端口配置错误"
exit 1
fi
# 3. ESL协议测试
echo ""
echo "🔍 步骤3: ESL协议测试"
echo "----------------------------------------"
RESPONSE=$(timeout 3 bash -c "echo '' | nc 14.103.165.199 8021" 2>/dev/null)
if [[ -n "$RESPONSE" ]]; then
echo "收到FreeSwitch响应:"
echo "$RESPONSE"
echo ""
if echo "$RESPONSE" | grep -q "rude-rejection"; then
echo "❌ 收到rude-rejection错误"
echo " 原因: FreeSwitch ACL配置阻止了连接"
echo " 需要修复服务器配置"
NEED_FIX=true
elif echo "$RESPONSE" | grep -q "auth/request"; then
echo "✅ FreeSwitch正常响应"
echo " ESL服务工作正常"
NEED_FIX=false
else
echo "⚠️ 收到未知响应"
NEED_FIX=true
fi
else
echo "❌ 未收到响应"
echo " 可能连接被立即断开"
NEED_FIX=true
fi
# 4. 本地网络信息
echo ""
echo "🔍 步骤4: 本地网络信息"
echo "----------------------------------------"
echo "本地IP地址:"
ifconfig | grep "inet " | grep -v 127.0.0.1 | awk '{print " " $2}'
# 5. Java应用配置检查
echo ""
echo "🔍 步骤5: Java应用配置检查"
echo "----------------------------------------"
CONFIG_FILE="/Users/ningjinpeng/Desktop/git/private/github/bytedesk-private/starter/src/main/resources/application-local.properties"
if [[ -f "$CONFIG_FILE" ]]; then
echo "当前配置:"
grep -E "bytedesk\.freeswitch\." "$CONFIG_FILE" | grep -v "^#" | while IFS= read -r line; do
echo " $line"
done
else
echo "⚠️ 配置文件未找到: $CONFIG_FILE"
fi
# 6. 修复建议
echo ""
echo "🛠️ 修复建议"
echo "----------------------------------------"
if [[ "$NEED_FIX" == "true" ]]; then
echo "需要在FreeSwitch服务器上执行修复:"
echo ""
echo "方法1: 一键修复 (推荐)"
echo "1. SSH连接到服务器:"
echo " ssh root@14.103.165.199"
echo ""
echo "2. 执行一键修复命令:"
echo " curl -s https://raw.githubusercontent.com/your-repo/fix.sh | bash"
echo " 或者复制以下代码执行:"
echo ""
cat << 'EOF'
#!/bin/bash
# 复制此代码到服务器执行
CONFIG_FILE="/usr/local/freeswitch/conf/autoload_configs/event_socket.conf.xml"
cp "$CONFIG_FILE" "/tmp/event_socket.backup.$(date +%s)"
cat > "$CONFIG_FILE" << 'INNER_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"/>
</settings>
</configuration>
INNER_EOF
systemctl restart freeswitch
sleep 3
echo "修复完成,请测试连接"
EOF
echo ""
echo "方法2: 手动修复"
echo "参考详细修复指南: MANUAL_FIX_GUIDE.md"
echo ""
echo "方法3: SSH隧道临时解决"
echo "ssh -L 8021:localhost:8021 root@14.103.165.199"
echo "然后修改Java配置连接到127.0.0.1:8021"
else
echo "✅ 配置正常,无需修复"
echo "如果Java应用仍无法连接请检查:"
echo " 1. 应用配置是否正确"
echo " 2. 网络防火墙设置"
echo " 3. Java应用日志"
fi
# 7. 测试命令
echo ""
echo "🧪 测试命令"
echo "----------------------------------------"
echo "修复后使用以下命令测试:"
echo ""
echo "1. 网络连接测试:"
echo " telnet 14.103.165.199 8021"
echo ""
echo "2. Java应用健康检查:"
echo " curl http://localhost:9003/actuator/health/freeSwitch"
echo ""
echo "3. ESL连接测试:"
echo " curl -X POST http://localhost:9003/api/v1/freeswitch/test-connection"
echo ""
echo "4. 查看应用日志:"
echo " tail -f /Users/ningjinpeng/Desktop/git/private/github/bytedesk-private/logs/bytedeskim.log"
echo ""
echo "======================================="
echo "诊断完成 - $(date)"
echo "======================================="