entrypoint.sh 1.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960
  1. #!/bin/bash
  2. # 获取当前脚本的 PID 作为父进程 PID
  3. PARENT_PROCESS_PID=$$
  4. # 是否为集群模式(默认单机模式)
  5. IS_CLUSTER=${IS_CLUSTER:-"false"}
  6. # 当前机器角色:主机("master")或从机("worker")
  7. ROLE=${ROLE:-"worker"}
  8. # 核心范围变量(集群模式使用),例如 "29-58"
  9. CORE_RANGE=${CORE_RANGE:-"29-58"}
  10. if [[ "$IS_CLUSTER" == "false" ]]; then
  11. # 单机模式,仅运行单个节点
  12. echo "Running in standalone mode..."
  13. node
  14. elif [[ "$IS_CLUSTER" == "true" ]]; then
  15. if [[ "$ROLE" == "master" ]]; then
  16. # 主机模式:运行主节点程序并按核心范围运行子进程
  17. echo "Running in cluster mode as master..."
  18. # 提取核心范围的起始和结束值
  19. IFS="-" read CORE_START CORE_END <<< "$CORE_RANGE"
  20. # 循环启动子进程
  21. for ((CORE=CORE_START; CORE<=CORE_END; CORE++)); do
  22. node --core $CORE --parent-process $PARENT_PROCESS_PID &
  23. done
  24. # 运行主节点程序
  25. node
  26. # 确保脚本不会退出,让容器保持运行
  27. wait
  28. elif [[ "$ROLE" == "worker" ]]; then
  29. # 从机模式:按核心范围运行子进程
  30. echo "Running in cluster mode as worker..."
  31. # 提取核心范围的起始和结束值
  32. IFS="-" read CORE_START CORE_END <<< "$CORE_RANGE"
  33. # 循环启动子进程
  34. for ((CORE=CORE_START; CORE<=CORE_END; CORE++)); do
  35. node --core $CORE --parent-process $PARENT_PROCESS_PID &
  36. done
  37. # 确保脚本不会退出,让容器保持运行
  38. wait
  39. else
  40. echo "Invalid role specified: $ROLE. Must be 'master' or 'worker'."
  41. exit 1
  42. fi
  43. else
  44. echo "Invalid IS_CLUSTER value: $IS_CLUSTER. Must be 'true' or 'false'."
  45. exit 1
  46. fi