接口优化
This commit is contained in:
122
start_server.sh
Normal file
122
start_server.sh
Normal file
@@ -0,0 +1,122 @@
|
||||
#!/bin/bash
|
||||
|
||||
# 铁路项目管理系统 - 直接运行启动脚本
|
||||
# 使用方法: ./start_server.sh [端口号]
|
||||
# 默认端口: 8000
|
||||
|
||||
# 设置端口号,默认为8000
|
||||
PORT=${1:-8000}
|
||||
|
||||
echo "=== 铁路项目管理系统启动脚本 ==="
|
||||
echo "端口: $PORT"
|
||||
echo "按 Ctrl+C 停止服务"
|
||||
|
||||
# 清理端口函数
|
||||
kill_process_on_port() {
|
||||
local port=$1
|
||||
echo "检查端口 ${port} 的进程..."
|
||||
|
||||
# Linux系统使用不同的命令查找占用端口的进程
|
||||
if command -v lsof >/dev/null 2>&1; then
|
||||
# 使用lsof
|
||||
pid=$(lsof -ti :${port})
|
||||
elif command -v netstat >/dev/null 2>&1; then
|
||||
# 使用netstat
|
||||
pid=$(netstat -tlnp 2>/dev/null | grep ":${port} " | awk '{print $7}' | cut -d'/' -f1)
|
||||
elif command -v ss >/dev/null 2>&1; then
|
||||
# 使用ss
|
||||
pid=$(ss -tlnp | grep ":${port} " | sed 's/.*pid=\([0-9]*\).*/\1/')
|
||||
else
|
||||
echo "警告: 无法找到 lsof、netstat 或 ss 命令,跳过端口检查"
|
||||
return
|
||||
fi
|
||||
|
||||
if [ -n "$pid" ] && [ "$pid" != "" ]; then
|
||||
echo "发现端口 ${port} 被占用,PID: ${pid},正在杀死进程..."
|
||||
kill -9 $pid 2>/dev/null
|
||||
sleep 2
|
||||
echo "已杀死端口 ${port} 的进程"
|
||||
else
|
||||
echo "端口 ${port} 未被占用"
|
||||
fi
|
||||
}
|
||||
|
||||
# 检查Python环境
|
||||
check_python() {
|
||||
if ! command -v python3 >/dev/null 2>&1; then
|
||||
echo "错误: 未找到 python3"
|
||||
exit 1
|
||||
fi
|
||||
|
||||
# 检查虚拟环境
|
||||
if [ -d ".venv" ]; then
|
||||
echo "激活虚拟环境..."
|
||||
source .venv/bin/activate
|
||||
elif [ -d "venv" ]; then
|
||||
echo "激活虚拟环境..."
|
||||
source venv/bin/activate
|
||||
else
|
||||
echo "警告: 未找到虚拟环境,使用系统Python"
|
||||
fi
|
||||
}
|
||||
|
||||
# 检查依赖
|
||||
check_dependencies() {
|
||||
echo "检查依赖包..."
|
||||
python3 -c "import fastapi, uvicorn" 2>/dev/null
|
||||
if [ $? -ne 0 ]; then
|
||||
echo "错误: 缺少必要的依赖包 (fastapi, uvicorn)"
|
||||
echo "请运行: pip install -r requirements.txt"
|
||||
exit 1
|
||||
fi
|
||||
}
|
||||
|
||||
# 显示服务信息
|
||||
show_service_info() {
|
||||
echo ""
|
||||
echo "=================================="
|
||||
echo "✅ 服务启动成功!"
|
||||
echo "🌐 访问地址: http://localhost:$PORT"
|
||||
echo "📖 API文档: http://localhost:$PORT/docs"
|
||||
echo "📋 ReDoc文档: http://localhost:$PORT/redoc"
|
||||
echo "🔍 健康检查: http://localhost:$PORT/health"
|
||||
echo "=================================="
|
||||
echo ""
|
||||
}
|
||||
|
||||
# 清理函数
|
||||
cleanup() {
|
||||
echo ""
|
||||
echo "正在停止服务..."
|
||||
# uvicorn会自动处理SIGTERM信号
|
||||
exit 0
|
||||
}
|
||||
|
||||
# 主函数
|
||||
main() {
|
||||
# 清理端口
|
||||
kill_process_on_port $PORT
|
||||
|
||||
# 检查环境
|
||||
check_python
|
||||
check_dependencies
|
||||
|
||||
# 捕获退出信号
|
||||
trap cleanup SIGINT SIGTERM
|
||||
|
||||
echo "启动服务..."
|
||||
|
||||
# 显示服务信息(在后台执行,延迟3秒显示)
|
||||
(sleep 3 && show_service_info) &
|
||||
|
||||
# 直接启动服务(前台运行)
|
||||
python3 -m uvicorn app.main:app \
|
||||
--host 0.0.0.0 \
|
||||
--port $PORT \
|
||||
--reload \
|
||||
--access-log \
|
||||
--log-level info
|
||||
}
|
||||
|
||||
# 运行主函数
|
||||
main
|
||||
Reference in New Issue
Block a user