Files
EchoChat/scripts/status.sh
bujinyuan 807e111cb9 chore(scripts): start/stop/status 接入 media-server(port 3300)
- start.sh:新增 start_media(),端口 3300,缺 .env 时自动从 .env.example 复制;
  缺 node_modules 时给出提示不跑命令;加入 all/独立子命令
- stop.sh:新增 stop_media(),通过 PID 文件 + 端口兜底停止媒体服务器
- status.sh:状态面板增加 "媒体服务器 SFU (:3300)" 行
- 完整用法:./scripts/start.sh [all|backend|frontend|admin|media|docker|--no-docker]

Made-with: Cursor
2026-04-22 11:27:21 +08:00

61 lines
1.7 KiB
Bash
Executable File

#!/usr/bin/env bash
# EchoChat 服务状态查看脚本
set -euo pipefail
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
ROOT_DIR="$(cd "$SCRIPT_DIR/.." && pwd)"
RUN_DIR="$ROOT_DIR/.run"
COLOR_GREEN='\033[0;32m'
COLOR_RED='\033[0;31m'
COLOR_YELLOW='\033[0;33m'
COLOR_RESET='\033[0m'
check_port() {
local name="$1"
local port="$2"
local url="$3"
local pid
pid="$(lsof -iTCP:"$port" -sTCP:LISTEN -n -P -t 2>/dev/null | head -n1 || true)"
if [[ -n "$pid" ]]; then
printf " %-22s ${COLOR_GREEN}● RUNNING${COLOR_RESET} PID=%-8s %s\n" "$name (:$port)" "$pid" "$url"
else
printf " %-22s ${COLOR_RED}○ STOPPED${COLOR_RESET} %-12s %s\n" "$name (:$port)" "" "$url"
fi
}
check_container() {
local name="$1"
local port="$2"
local status
status="$(docker inspect -f '{{.State.Status}}' "$name" 2>/dev/null || echo 'missing')"
case "$status" in
running)
printf " %-22s ${COLOR_GREEN}● RUNNING${COLOR_RESET} container=%s\n" "$name (:$port)" "$name"
;;
missing)
printf " %-22s ${COLOR_YELLOW}? NOT-CREATED${COLOR_RESET}\n" "$name (:$port)"
;;
*)
printf " %-22s ${COLOR_RED}○ %s${COLOR_RESET}\n" "$name (:$port)" "$status"
;;
esac
}
echo ""
echo "===== EchoChat 应用层 ====="
check_port "Go 后端" 8085 "http://localhost:8085"
check_port "媒体服务器 SFU" 3300 "http://localhost:3300/healthz"
check_port "前台用户端" 5173 "http://localhost:5173"
check_port "后台管理端" 3100 "http://localhost:3100"
echo ""
echo "===== Docker 中间件 ====="
check_container "echochat-postgres" 5432
check_container "echochat-redis" 6379
check_container "echochat-minio" 9000
echo ""
echo "日志目录:$RUN_DIR/logs"
echo ""