start-etcd.sh 2.1 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283
  1. #!/bin/bash
  2. # 启动etcd服务
  3. set -e
  4. SCRIPT_DIR="$(cd "$(dirname "${BASH_SOURCE[0]}")" && pwd)"
  5. BACKEND_DIR="$(dirname "$SCRIPT_DIR")"
  6. # 检测操作系统
  7. OS_TYPE="$(uname -s)"
  8. case "$OS_TYPE" in
  9. Darwin*) PLATFORM="darwin" ;;
  10. Linux*) PLATFORM="linux" ;;
  11. CYGWIN*|MINGW*|MSYS*) PLATFORM="windows" ;;
  12. *) echo "不支持的操作系统: $OS_TYPE"; exit 1 ;;
  13. esac
  14. # 根据平台选择 etcd 二进制文件
  15. ETCD_BIN="$BACKEND_DIR/bin/$PLATFORM/etcd"
  16. if [ "$PLATFORM" = "windows" ]; then
  17. ETCD_BIN="$BACKEND_DIR/bin/$PLATFORM/etcd.exe"
  18. fi
  19. ETCD_DATA_DIR="$BACKEND_DIR/data/etcd"
  20. ETCD_LOG="$BACKEND_DIR/logs/etcd.log"
  21. ETCD_PID="$BACKEND_DIR/logs/etcd.pid"
  22. # 检查 etcd 是否已安装
  23. if [ ! -f "$ETCD_BIN" ]; then
  24. echo "错误: 找不到 $PLATFORM 平台的 etcd 二进制文件"
  25. echo "路径: $ETCD_BIN"
  26. echo ""
  27. echo "请下载对应平台的 etcd 并放置到正确位置:"
  28. echo " macOS: backend/bin/darwin/etcd"
  29. echo " Linux: backend/bin/linux/etcd"
  30. echo " Windows: backend/bin/windows/etcd.exe"
  31. echo ""
  32. echo "下载地址: https://github.com/etcd-io/etcd/releases/tag/v3.6.10"
  33. exit 1
  34. fi
  35. # 检查etcd是否已运行
  36. if [ -f "$ETCD_PID" ]; then
  37. PID=$(cat "$ETCD_PID")
  38. if ps -p "$PID" > /dev/null 2>&1; then
  39. echo "✓ etcd 已在运行 (PID: $PID)"
  40. exit 0
  41. fi
  42. fi
  43. # 创建数据目录
  44. mkdir -p "$ETCD_DATA_DIR"
  45. mkdir -p "$(dirname "$ETCD_LOG")"
  46. echo "启动 etcd..."
  47. # 启动etcd
  48. nohup "$ETCD_BIN" \
  49. --name cloudpods-etcd \
  50. --data-dir "$ETCD_DATA_DIR" \
  51. --listen-client-urls http://localhost:2379 \
  52. --advertise-client-urls http://localhost:2379 \
  53. --listen-peer-urls http://localhost:2380 \
  54. --initial-advertise-peer-urls http://localhost:2380 \
  55. --initial-cluster cloudpods-etcd=http://localhost:2380 \
  56. > "$ETCD_LOG" 2>&1 &
  57. PID=$!
  58. echo $PID > "$ETCD_PID"
  59. # 等待etcd启动
  60. sleep 2
  61. if ps -p "$PID" > /dev/null 2>&1; then
  62. echo "✓ etcd 启动成功 (PID: $PID)"
  63. echo " - Client URL: http://localhost:2379"
  64. echo " - Data Dir: $ETCD_DATA_DIR"
  65. else
  66. echo "✗ etcd 启动失败"
  67. tail -10 "$ETCD_LOG"
  68. exit 1
  69. fi