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

113 lines
3.2 KiB
Bash
Executable File

#!/bin/bash
# FreeSwitch ESL 连接状态监控 (本地执行)
# 持续监控连接状态变化
SERVER="14.103.165.199"
PORT="8021"
echo "========================================="
echo "FreeSwitch ESL 连接状态监控"
echo "========================================="
echo "监控服务器: $SERVER:$PORT"
echo "开始时间: $(date)"
echo "按 Ctrl+C 停止监控"
echo ""
# 初始状态检查
echo "🔍 初始状态检查:"
echo "-----------------------------------------"
# 1. 网络连通性
if ping -c 1 -W 2 $SERVER > /dev/null 2>&1; then
echo "✅ 网络连通性: 正常"
else
echo "❌ 网络连通性: 失败"
exit 1
fi
# 2. 端口连通性
if nc -z -w 2 $SERVER $PORT 2>/dev/null; then
echo "✅ 端口连通性: 正常"
else
echo "❌ 端口连通性: 失败"
exit 1
fi
# 3. ESL协议测试
echo "🔍 ESL协议测试:"
RESPONSE=$(timeout 2 bash -c "echo '' | nc $SERVER $PORT" 2>/dev/null)
if [[ -n "$RESPONSE" ]]; then
if echo "$RESPONSE" | grep -q "rude-rejection"; then
echo "❌ ESL状态: 连接被拒绝 (ACL限制)"
echo " 响应: $(echo "$RESPONSE" | head -1)"
elif echo "$RESPONSE" | grep -q "auth/request"; then
echo "✅ ESL状态: 等待认证 (连接正常)"
echo " 响应: $(echo "$RESPONSE" | head -1)"
else
echo "⚠️ ESL状态: 未知响应"
echo " 响应: $(echo "$RESPONSE" | head -1)"
fi
else
echo "❌ ESL状态: 无响应"
fi
echo ""
echo "=== 持续监控模式 (每30秒检查一次) ==="
echo ""
# 持续监控循环
while true; do
TIMESTAMP=$(date '+%H:%M:%S')
# 测试ESL连接
RESPONSE=$(timeout 2 bash -c "echo '' | nc $SERVER $PORT" 2>/dev/null)
if [[ -n "$RESPONSE" ]]; then
if echo "$RESPONSE" | grep -q "rude-rejection"; then
echo "[$TIMESTAMP] ❌ 仍然被拒绝 - ACL限制未解除"
elif echo "$RESPONSE" | grep -q "auth/request"; then
echo "[$TIMESTAMP] ✅ 连接成功! - 收到认证请求"
echo ""
echo "🎉 FreeSwitch ESL 修复成功!"
echo "Java应用现在可以连接到FreeSwitch了"
break
else
echo "[$TIMESTAMP] ⚠️ 未知响应: $(echo "$RESPONSE" | head -1 | tr -d '\r\n')"
fi
else
echo "[$TIMESTAMP] ❌ 无响应或连接失败"
fi
sleep 30
done
echo ""
echo "=== 最终验证 ==="
# Java应用健康检查测试
if command -v curl > /dev/null 2>&1; then
echo "🔍 测试Java应用健康状态..."
# 假设Java应用在本地9003端口运行
if curl -s -f http://localhost:9003/actuator/health/freeSwitch > /dev/null 2>&1; then
echo "✅ Java应用FreeSwitch健康检查通过"
# 获取详细健康状态
echo ""
echo "📊 详细健康状态:"
curl -s http://localhost:9003/actuator/health/freeSwitch | python -m json.tool 2>/dev/null || echo "健康检查响应获取成功"
else
echo "⚠️ Java应用未运行或健康检查失败"
echo " 请启动Java应用并确保FreeSwitch模块已启用"
fi
else
echo "💡 建议: 安装curl后可测试Java应用健康状态"
fi
echo ""
echo "=== 监控完成 ==="
echo "结束时间: $(date)"