#!/usr/bin/env bash # stop.sh — 停止 Siemens RAGAS 后台 Web 服务 # 用法:bash stop.sh set -uo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" cd "$SCRIPT_DIR" # ── 颜色输出 ────────────────────────────────────────────────────── if [ -t 1 ]; then GREEN='\033[0;32m'; YELLOW='\033[1;33m'; RED='\033[0;31m'; CYAN='\033[0;36m'; NC='\033[0m' else GREEN=''; YELLOW=''; RED=''; CYAN=''; NC='' fi ok() { echo -e "${GREEN}[OK]${NC} $*"; } warn() { echo -e "${YELLOW}[WARN]${NC} $*"; } err() { echo -e "${RED}[ERROR]${NC} $*" >&2; } echo "" echo -e "${CYAN} Siemens RAGAS Console — 停止服务${NC}" echo "" PID_FILE="$SCRIPT_DIR/.server.pid" if [ ! -f "$PID_FILE" ]; then warn "未找到 .server.pid,服务可能未启动或已停止" exit 0 fi PID=$(cat "$PID_FILE") if ! kill -0 "$PID" 2>/dev/null; then warn "进程 $PID 已不存在,清理 PID 文件" rm -f "$PID_FILE" exit 0 fi # 优雅停止(SIGTERM) echo -e " 正在停止进程 (PID=$PID)..." kill "$PID" 2>/dev/null || true # 等待最多 5 秒 for i in 1 2 3 4 5; do sleep 1 if ! kill -0 "$PID" 2>/dev/null; then break fi echo -e " 等待进程退出... ($i/5)" done # 若进程仍存在,强制终止 if kill -0 "$PID" 2>/dev/null; then warn "进程未响应,强制终止 (SIGKILL)..." kill -9 "$PID" 2>/dev/null || true sleep 1 fi rm -f "$PID_FILE" if kill -0 "$PID" 2>/dev/null; then err "无法停止进程 $PID,请手动执行:kill -9 $PID" exit 1 else ok "服务已停止" echo "" fi