69 lines
1.7 KiB
Bash
69 lines
1.7 KiB
Bash
#!/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
|