Files
YG_FT_Platform/request/stop.sh
DESKTOP-72TV0V4\caoxiaozhu bda8f13446 1. 增加了请求框架
2. 增加了删除虚拟环境的脚本
2026-01-12 14:20:44 +08:00

84 lines
2.1 KiB
Bash
Raw Blame History

This file contains invisible Unicode characters
This file contains invisible Unicode characters that are indistinguishable to humans but may be processed differently by a computer. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env bash
set -euo pipefail
echo "🛑 停止 X-Request (FastAPI)"
# 永远从脚本所在目录运行
SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
cd "$SCRIPT_DIR"
PID_FILE="logs/xrequest.pid"
# 读取 .env 文件中的配置
PORT="8000" # 默认端口
# 解析 .env 文件中的 PORT
if [ -f ".env" ]; then
# 使用 grep 和 sed 来提取 PORT忽略注释
PORT=$(grep -v '^#' .env | grep '^PORT=' | head -1 | cut -d= -f2 | tr -d '"' || echo "8000")
fi
echo "📋 使用配置: PORT=$PORT"
kill_pid() {
local pid="$1"
if [ -z "$pid" ]; then
return 1
fi
# Windows Git Bash: 优先 taskkill对 python.exe 更稳)
if command -v taskkill >/dev/null 2>&1; then
taskkill //F //PID "$pid" >/dev/null 2>&1 || true
return 0
fi
# Linux/macOS
kill "$pid" >/dev/null 2>&1 || true
sleep 0.3
kill -9 "$pid" >/dev/null 2>&1 || true
return 0
}
if [ -f "$PID_FILE" ]; then
PID="$(cat "$PID_FILE" 2>/dev/null || true)"
if [ -n "$PID" ] && kill -0 "$PID" >/dev/null 2>&1; then
echo "🔪 终止进程 pid=$PID ..."
kill_pid "$PID"
rm -f "$PID_FILE" || true
echo "✅ 已停止"
exit 0
fi
# pid 文件存在但进程不存在:清理
rm -f "$PID_FILE" || true
fi
echo " 未找到有效 PID 文件,尝试按端口 $PORT 查找并停止..."
PIDS_BY_PORT=""
if command -v netstat >/dev/null 2>&1; then
# Windows Git Bash (netstat -ano)
PIDS_BY_PORT="$(netstat -ano 2>/dev/null | grep -E "[:.]$PORT[[:space:]]" | grep LISTENING | awk '{print $NF}' | sort -u | tr '\n' ' ' || true)"
fi
if [ -z "$PIDS_BY_PORT" ] && command -v lsof >/dev/null 2>&1; then
PIDS_BY_PORT="$(lsof -ti tcp:$PORT 2>/dev/null | sort -u | tr '\n' ' ' || true)"
fi
if [ -z "$PIDS_BY_PORT" ] && command -v ss >/dev/null 2>&1; then
PIDS_BY_PORT="$(ss -ltnp 2>/dev/null | grep ':$PORT' | sed -n 's/.*pid=\([0-9]\+\).*/\1/p' | sort -u | tr '\n' ' ' || true)"
fi
if [ -z "$PIDS_BY_PORT" ]; then
echo "✅ 未发现 $PORT 端口监听进程(无需停止)"
exit 0
fi
for p in $PIDS_BY_PORT; do
echo "🔪 终止进程 pid=$p (by port $PORT)..."
kill_pid "$p"
done
echo "✅ 已停止by port $PORT"