start_optimized.sh 1.9 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. #!/bin/bash
  2. # 优化版伺服驱动选型工具启动脚本
  3. # 使用Python轻量级服务器,添加资源限制和错误处理
  4. set -euo pipefail
  5. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  6. PORT=8080
  7. PID_FILE="$SCRIPT_DIR/.server.pid"
  8. # 检查端口是否已被占用
  9. check_port() {
  10. if lsof -i :$PORT > /dev/null 2>&1; then
  11. echo "错误: 端口 $PORT 已被占用"
  12. echo "请先停止占用该端口的进程,或使用其他端口"
  13. return 1
  14. fi
  15. return 0
  16. }
  17. # 启动服务器函数
  18. start_server() {
  19. cd "$SCRIPT_DIR"
  20. # 设置ulimit限制资源使用(防止内存过度消耗)
  21. ulimit -v 524288 # 限制虚拟内存为512MB
  22. ulimit -m 262144 # 限制物理内存为256MB
  23. echo "启动伺服驱动选型工具 (优化版)..."
  24. echo "工作目录: $SCRIPT_DIR"
  25. echo "访问地址: http://localhost:$PORT"
  26. echo "资源限制: 内存 256MB, 虚拟内存 512MB"
  27. echo "按 Ctrl+C 停止服务器"
  28. echo ""
  29. # 启动Python服务器并记录PID
  30. python3 -m http.server $PORT &
  31. SERVER_PID=$!
  32. echo $SERVER_PID > "$PID_FILE"
  33. echo "服务器PID: $SERVER_PID"
  34. echo "PID文件: $PID_FILE"
  35. # 等待服务器进程结束
  36. wait $SERVER_PID
  37. }
  38. # 清理函数
  39. cleanup() {
  40. echo ""
  41. echo "正在停止服务器..."
  42. if [ -f "$PID_FILE" ]; then
  43. PID=$(cat "$PID_FILE")
  44. if kill -0 $PID 2>/dev/null; then
  45. kill $PID
  46. wait $PID 2>/dev/null
  47. fi
  48. rm -f "$PID_FILE"
  49. fi
  50. echo "服务器已停止"
  51. exit 0
  52. }
  53. # 设置信号处理
  54. trap cleanup SIGINT SIGTERM
  55. # 主程序
  56. main() {
  57. # 检查Python3是否可用
  58. if ! command -v python3 &> /dev/null; then
  59. echo "错误: 未找到 python3"
  60. exit 1
  61. fi
  62. # 检查端口可用性
  63. if ! check_port; then
  64. exit 1
  65. fi
  66. # 启动服务器
  67. start_server
  68. }
  69. # 运行主程序
  70. main "$@"