#!/bin/bash # 检查服务连接性脚本 PORT=12240 SERVER_IP="119.45.30.82" echo "=== 检查服务连接性 ===" echo "" # 1. 检查服务是否在运行 echo "1. 检查服务进程..." PID=$(ps aux | grep cattletends | grep -v grep | awk '{print $2}') if [ -n "$PID" ]; then echo " ✓ 服务正在运行,PID: $PID" else echo " ✗ 服务未运行" exit 1 fi echo "" # 2. 检查端口是否监听 echo "2. 检查端口 $PORT 监听状态..." LISTENING=$(netstat -tlnp 2>/dev/null | grep ":$PORT " || ss -tlnp 2>/dev/null | grep ":$PORT ") if [ -n "$LISTENING" ]; then echo " ✓ 端口 $PORT 正在监听" echo " 详细信息:" echo "$LISTENING" | sed 's/^/ /' # 检查监听地址 if echo "$LISTENING" | grep -q "0.0.0.0:$PORT\|:::$PORT"; then echo " ✓ 服务监听在所有网络接口上(0.0.0.0),可以从外部访问" elif echo "$LISTENING" | grep -q "127.0.0.1:$PORT\|localhost:$PORT"; then echo " ⚠ 服务只监听在 localhost,无法从外部访问" echo " 需要修改配置监听 0.0.0.0" fi else echo " ✗ 端口 $PORT 未监听" exit 1 fi echo "" # 3. 本地测试 echo "3. 本地连接测试..." if curl -s -o /dev/null -w "%{http_code}" http://localhost:$PORT/api/cattle-data | grep -q "200\|404"; then echo " ✓ 本地连接成功" else echo " ✗ 本地连接失败" fi echo "" # 4. 检查防火墙 echo "4. 检查防火墙状态..." if command -v firewall-cmd &> /dev/null; then FIREWALL_STATUS=$(firewall-cmd --state 2>/dev/null) if [ "$FIREWALL_STATUS" = "running" ]; then echo " ⚠ Firewalld 正在运行" PORT_OPEN=$(firewall-cmd --query-port=$PORT/tcp 2>/dev/null) if [ "$PORT_OPEN" = "yes" ]; then echo " ✓ 端口 $PORT 已在防火墙中开放" else echo " ✗ 端口 $PORT 未在防火墙中开放" echo "" echo " 执行以下命令开放端口:" echo " firewall-cmd --add-port=$PORT/tcp --permanent" echo " firewall-cmd --reload" fi else echo " ℹ Firewalld 未运行或未安装" fi fi echo "" # 5. 检查 iptables if command -v iptables &> /dev/null; then IPTABLES_RULE=$(iptables -L INPUT -n | grep "$PORT" || iptables -L INPUT -n | grep "ACCEPT.*tcp") if [ -n "$IPTABLES_RULE" ]; then echo " ℹ 检测到 iptables 规则" fi fi echo "" # 6. 网络接口检查 echo "5. 网络接口信息..." IP_ADDR=$(hostname -I | awk '{print $1}' 2>/dev/null || ip addr show | grep "inet " | grep -v "127.0.0.1" | head -1 | awk '{print $2}' | cut -d'/' -f1) if [ -n "$IP_ADDR" ]; then echo " 服务器IP地址: $IP_ADDR" if [ "$IP_ADDR" = "$SERVER_IP" ]; then echo " ✓ IP地址匹配" else echo " ⚠ IP地址不匹配,请确认服务器IP是否正确" fi fi echo "" echo "=== 检查完成 ===" echo "" echo "如果本地测试成功但外部无法访问,请检查:" echo "1. 云服务器安全组是否开放 $PORT 端口" echo "2. 服务器防火墙是否开放 $PORT 端口" echo "3. 服务是否监听在 0.0.0.0 而不是 127.0.0.1"