gongxiangp2/check-frp-status.sh

117 lines
3.7 KiB
Bash

#!/bin/bash
# FRP 穿透服务状态检查脚本
echo "========================================="
echo "FRP 穿透服务状态检查"
echo "========================================="
echo ""
# 检查 frpc 进程
echo "1. 检查 frpc 进程状态..."
if ps aux | grep -v grep | grep frpc > /dev/null; then
echo " [OK] frpc 进程正在运行"
ps aux | grep -v grep | grep frpc
else
echo " [FAIL] frpc 进程未运行"
fi
echo ""
# 检查 frpc 配置
echo "2. 检查 frpc 配置文件..."
if [ -f /etc/frp/frpc.toml ]; then
echo " [OK] 配置文件存在: /etc/frp/frpc.toml"
echo " 配置内容:"
cat /etc/frp/frpc.toml | grep -A 5 "youyidian-3d" || echo " 未找到 youyidian-3d 配置"
else
echo " [FAIL] 配置文件不存在"
fi
echo ""
# 检查本地应用端口
echo "3. 检查本地应用端口 (4320)..."
if netstat -tlnp 2>/dev/null | grep -q ":4320" || ss -tlnp 2>/dev/null | grep -q ":4320"; then
echo " [OK] 端口 4320 正在监听"
netstat -tlnp 2>/dev/null | grep ":4320" || ss -tlnp 2>/dev/null | grep ":4320"
else
echo " [FAIL] 端口 4320 未监听"
fi
echo ""
# 测试本地应用连接
echo "4. 测试本地应用连接..."
if curl -s -o /dev/null -w "%{http_code}" --max-time 5 http://127.0.0.1:4320 > /tmp/curl_result.txt; then
HTTP_CODE=$(cat /tmp/curl_result.txt)
if [ "$HTTP_CODE" != "000" ]; then
echo " [OK] 本地应用响应正常 (HTTP $HTTP_CODE)"
else
echo " [WARN] 本地应用无响应"
fi
else
echo " [WARN] 无法连接到本地应用"
fi
echo ""
# 检查 frps 服务器连接
echo "5. 检查 frps 服务器连接 (180.97.221.140:7000)..."
FRPS_HOST="180.97.221.140"
FRPS_PORT="7000"
if command -v nc > /dev/null; then
if timeout 3 nc -zv $FRPS_HOST $FRPS_PORT 2>&1 | grep -q "succeeded"; then
echo " [OK] 可以连接到 frps 服务器"
else
echo " [FAIL] 无法连接到 frps 服务器 $FRPS_HOST:$FRPS_PORT"
echo " 请检查:"
echo " - frps 服务器是否运行"
echo " - 网络连接是否正常"
echo " - 防火墙是否阻止了连接"
fi
else
echo " [WARN] nc 命令不可用,跳过连接测试"
fi
echo ""
# 检查日志文件
echo "6. 检查 frpc 日志..."
LOG_FILE="/root/frp/frpc.log"
if [ -f "$LOG_FILE" ]; then
LOG_SIZE=$(stat -c%s "$LOG_FILE" 2>/dev/null || echo "0")
if [ "$LOG_SIZE" -gt 0 ]; then
echo " [OK] 日志文件存在 ($LOG_SIZE 字节)"
echo " 最近 10 行日志:"
tail -10 "$LOG_FILE" 2>/dev/null | sed 's/^/ /'
else
echo " [WARN] 日志文件存在但为空"
fi
else
echo " [WARN] 日志文件不存在: $LOG_FILE"
fi
echo ""
# 测试公网地址连接
echo "7. 测试公网地址连接 (180.97.221.140:2320)..."
PUBLIC_URL="http://180.97.221.140:2320"
if curl -s -o /dev/null -w "%{http_code}" --max-time 10 "$PUBLIC_URL" > /tmp/curl_public.txt 2>&1; then
HTTP_CODE=$(cat /tmp/curl_public.txt)
if [ "$HTTP_CODE" = "200" ] || [ "$HTTP_CODE" = "301" ] || [ "$HTTP_CODE" = "302" ] || [ "$HTTP_CODE" = "307" ]; then
echo " [OK] 公网地址可访问 (HTTP $HTTP_CODE)"
else
echo " [WARN] 公网地址返回异常状态码: $HTTP_CODE"
fi
else
echo " [FAIL] 无法访问公网地址"
echo " 错误信息:"
cat /tmp/curl_public.txt 2>&1 | sed 's/^/ /'
fi
echo ""
echo "========================================="
echo "检查完成"
echo "========================================="
echo ""
echo "如果公网地址无法访问,请检查:"
echo "1. frps 服务器 (180.97.221.140:7000) 是否运行"
echo "2. frpc 客户端配置是否正确"
echo "3. 防火墙规则是否允许端口 2320"
echo "4. 公网服务器上的 nginx 配置是否正确"