Files
railway_cloud/start_server.sh
2025-09-27 10:46:09 +08:00

121 lines
3.0 KiB
Bash
Raw Blame History

This file contains ambiguous Unicode characters
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.
#!/bin/bash
# 铁路项目管理系统 - 直接运行启动脚本
# 使用方法: ./start_server.sh [端口号]
# 默认端口: 8000
# 设置端口号默认为8000
PORT=${1:-3002}
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)"
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