#!/bin/bash # Whisper 服务连接测试脚本(Linux版本) # 用于在服务器上快速诊断 Whisper 连接问题 # 运行: bash test_whisper_connection.sh echo "======================================" echo " Whisper 服务连接诊断工具" echo "======================================" echo "" WHISPER_URL="http://localhost:5001" HEALTH_URL="${WHISPER_URL}/health" # 测试 1: 检查端口是否被监听 echo -e "\033[33m[测试 1] 检查端口 5001 是否被监听...\033[0m" if command -v lsof &> /dev/null; then PORT_CHECK=$(lsof -i:5001 -t 2>/dev/null) if [ -n "$PORT_CHECK" ]; then echo -e "\033[32m✅ 端口 5001 已被监听\033[0m" echo -e "\033[90m 进程ID: $PORT_CHECK\033[0m" ps -p $PORT_CHECK -o comm= 2>/dev/null | while read proc; do echo -e "\033[90m 进程名: $proc\033[0m" done else echo -e "\033[31m❌ 端口 5001 未被监听\033[0m" echo -e "\033[31m → Whisper 服务可能未启动\033[0m" fi elif command -v netstat &> /dev/null; then PORT_CHECK=$(netstat -tuln | grep :5001) if [ -n "$PORT_CHECK" ]; then echo -e "\033[32m✅ 端口 5001 已被监听\033[0m" echo -e "\033[90m $PORT_CHECK\033[0m" else echo -e "\033[31m❌ 端口 5001 未被监听\033[0m" echo -e "\033[31m → Whisper 服务可能未启动\033[0m" fi else echo -e "\033[90m⚠️ 无法检查端口(lsof/netstat 不可用)\033[0m" fi echo "" # 测试 2: 测试 HTTP 连接 echo -e "\033[33m[测试 2] 测试 HTTP 连接到 ${HEALTH_URL} ...\033[0m" if command -v curl &> /dev/null; then HTTP_CODE=$(curl -s -o /tmp/whisper_response.txt -w "%{http_code}" --connect-timeout 5 $HEALTH_URL) if [ "$HTTP_CODE" = "200" ]; then echo -e "\033[32m✅ HTTP 连接成功!\033[0m" echo -e "\033[90m 状态码: $HTTP_CODE\033[0m" echo -e "\033[90m 响应内容: $(cat /tmp/whisper_response.txt)\033[0m" rm -f /tmp/whisper_response.txt elif [ "$HTTP_CODE" = "000" ]; then echo -e "\033[31m❌ HTTP 连接失败(无法连接)\033[0m" echo -e "\033[33m → 可能原因: Whisper 服务未启动\033[0m" else echo -e "\033[33m⚠️ HTTP 返回状态码: $HTTP_CODE\033[0m" echo -e "\033[90m 响应内容: $(cat /tmp/whisper_response.txt)\033[0m" rm -f /tmp/whisper_response.txt fi else echo -e "\033[90m⚠️ curl 命令不可用,跳过此测试\033[0m" fi echo "" # 测试 3: 检查 Whisper 进程 echo -e "\033[33m[测试 3] 检查 Whisper Python 进程...\033[0m" WHISPER_PROCESS=$(ps aux | grep -i "whisper\|app.py" | grep -v grep) if [ -n "$WHISPER_PROCESS" ]; then echo -e "\033[32m✅ 找到 Whisper 相关进程\033[0m" echo -e "\033[90m$WHISPER_PROCESS\033[0m" else echo -e "\033[31m❌ 未找到 Whisper 进程\033[0m" echo -e "\033[31m → Whisper 服务可能未启动\033[0m" fi echo "" # 测试 4: 检查 localhost 解析 echo -e "\033[33m[测试 4] 测试 localhost 解析...\033[0m" if ping -c 1 localhost &> /dev/null; then echo -e "\033[32m✅ localhost 解析正常\033[0m" else echo -e "\033[31m❌ localhost 解析失败\033[0m" echo -e "\033[33m → 尝试使用 127.0.0.1 替代\033[0m" fi echo "" # 测试 5: 尝试连接到具体接口 echo -e "\033[33m[测试 5] 测试 Whisper API 接口...\033[0m" if command -v curl &> /dev/null; then # 测试 /health 接口 echo -e "\033[90m 测试 GET ${HEALTH_URL}\033[0m" HEALTH_RESPONSE=$(curl -s -X GET $HEALTH_URL) if [ -n "$HEALTH_RESPONSE" ]; then echo -e "\033[32m ✅ /health 接口响应: $HEALTH_RESPONSE\033[0m" else echo -e "\033[31m ❌ /health 接口无响应\033[0m" fi # 测试 /recognize 接口(不带文件,仅检测是否可访问) echo -e "\033[90m 测试 POST ${WHISPER_URL}/recognize\033[0m" RECOGNIZE_CODE=$(curl -s -o /dev/null -w "%{http_code}" -X POST ${WHISPER_URL}/recognize) if [ "$RECOGNIZE_CODE" != "000" ]; then echo -e "\033[32m ✅ /recognize 接口可访问(状态码: $RECOGNIZE_CODE)\033[0m" else echo -e "\033[31m ❌ /recognize 接口无法访问\033[0m" fi fi echo "" # 总结和建议 echo "======================================" echo " 诊断总结" echo "======================================" echo "" echo -e "\033[33m如果上述测试都失败,请按以下步骤排查:\033[0m" echo "" echo -e "\033[37m1. 启动 Whisper 服务:\033[0m" echo -e "\033[90m cd \033[0m" echo -e "\033[90m python3 app.py\033[0m" echo "" echo -e "\033[37m2. 检查 Whisper 服务日志,确认端口和监听地址\033[0m" echo "" echo -e "\033[37m3. 确认 Whisper 配置:\033[0m" echo -e "\033[90m - 监听地址: 0.0.0.0 或 localhost\033[0m" echo -e "\033[90m - 监听端口: 5001\033[0m" echo "" echo -e "\033[37m4. 检查防火墙:\033[0m" echo -e "\033[90m sudo firewall-cmd --list-ports # CentOS/RHEL\033[0m" echo -e "\033[90m sudo ufw status # Ubuntu\033[0m" echo "" echo -e "\033[37m5. 如果 Whisper 运行在不同端口,需要修改:\033[0m" echo -e "\033[90m LocalWhisperService.java 中的 WHISPER_URL\033[0m" echo "" echo -e "\033[37m6. 测试完成后,使用以下接口进行进一步测试:\033[0m" echo -e "\033[90m curl http://:/test/whisper/check\033[0m" echo -e "\033[90m curl http://:/test/whisper/info\033[0m" echo "" echo -e "\033[37m7. 查看 Java 应用日志:\033[0m" echo -e "\033[90m tail -f logs/sys-info.log | grep -i whisper\033[0m" echo ""