#!/bin/bash # 优化版伺服驱动选型工具启动脚本 # 使用Python轻量级服务器,添加资源限制和错误处理 set -euo pipefail SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)" PORT=8080 PID_FILE="$SCRIPT_DIR/.server.pid" # 检查端口是否已被占用 check_port() { if lsof -i :$PORT > /dev/null 2>&1; then echo "错误: 端口 $PORT 已被占用" echo "请先停止占用该端口的进程,或使用其他端口" return 1 fi return 0 } # 启动服务器函数 start_server() { cd "$SCRIPT_DIR" # 设置ulimit限制资源使用(防止内存过度消耗) ulimit -v 524288 # 限制虚拟内存为512MB ulimit -m 262144 # 限制物理内存为256MB echo "启动伺服驱动选型工具 (优化版)..." echo "工作目录: $SCRIPT_DIR" echo "访问地址: http://localhost:$PORT" echo "资源限制: 内存 256MB, 虚拟内存 512MB" echo "按 Ctrl+C 停止服务器" echo "" # 启动Python服务器并记录PID python3 -m http.server $PORT & SERVER_PID=$! echo $SERVER_PID > "$PID_FILE" echo "服务器PID: $SERVER_PID" echo "PID文件: $PID_FILE" # 等待服务器进程结束 wait $SERVER_PID } # 清理函数 cleanup() { echo "" echo "正在停止服务器..." if [ -f "$PID_FILE" ]; then PID=$(cat "$PID_FILE") if kill -0 $PID 2>/dev/null; then kill $PID wait $PID 2>/dev/null fi rm -f "$PID_FILE" fi echo "服务器已停止" exit 0 } # 设置信号处理 trap cleanup SIGINT SIGTERM # 主程序 main() { # 检查Python3是否可用 if ! command -v python3 &> /dev/null; then echo "错误: 未找到 python3" exit 1 fi # 检查端口可用性 if ! check_port; then exit 1 fi # 启动服务器 start_server } # 运行主程序 main "$@"