public.sh 4.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140
  1. #!/bin/bash
  2. # =====================================================
  3. # 公共服管理脚本(NameServer + PublicNode + AccountNode)
  4. # =====================================================
  5. SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
  6. CFG="$SCRIPT_DIR/_launch_public.xml"
  7. BASE_DIR="/data/CzServer/_output.server"
  8. DLL="$BASE_DIR/OpenCards.Server.DotNetCore.dll"
  9. LOG_DIR="$BASE_DIR/logfile"
  10. GREEN='\033[0;32m'
  11. RED='\033[0;31m'
  12. YELLOW='\033[1;33m'
  13. NC='\033[0m'
  14. mkdir -p "$LOG_DIR"
  15. is_running() {
  16. pgrep -f "$CFG $1" > /dev/null 2>&1
  17. }
  18. start_node() {
  19. local name=$1
  20. local extra=$2
  21. local log_file="$LOG_DIR/${name,,}.log"
  22. if is_running "$name"; then
  23. echo -e "${YELLOW}[SKIP] $name 已在运行${NC}"
  24. return 0
  25. fi
  26. echo -e "${GREEN}[START] $name ...${NC}"
  27. nohup dotnet "$DLL" "$CFG" $name $extra >> "$log_file" 2>&1 &
  28. sleep 3
  29. if is_running "$name"; then
  30. echo -e "${GREEN}[OK] $name 启动成功 (PID: $(pgrep -f "$CFG $name"))${NC}"
  31. else
  32. echo -e "${RED}[FAIL] $name 启动失败,查看日志:$log_file${NC}"
  33. tail -20 "$log_file"
  34. return 1
  35. fi
  36. }
  37. stop_node() {
  38. local name=$1
  39. local pid=$(pgrep -f "$CFG $name" 2>/dev/null)
  40. if [ -n "$pid" ]; then
  41. echo -e "${YELLOW}[STOP] $name (PID: $pid)${NC}"
  42. kill $pid
  43. sleep 1
  44. if pgrep -f "$CFG $name" > /dev/null 2>&1; then
  45. kill -9 $pid 2>/dev/null
  46. fi
  47. else
  48. echo -e "${YELLOW}[SKIP] $name 未在运行${NC}"
  49. fi
  50. }
  51. status_node() {
  52. local name=$1
  53. if is_running "$name"; then
  54. echo -e "${GREEN}[UP] $name (PID: $(pgrep -f "$CFG $name"))${NC}"
  55. else
  56. echo -e "${RED}[DOWN] $name${NC}"
  57. fi
  58. }
  59. case "${1:-start}" in
  60. start)
  61. echo "========================================"
  62. echo " 启动公共服 (NameServer → PublicNode → AccountNode)"
  63. echo "========================================"
  64. start_node "NameServer"
  65. start_node "PublicNode"
  66. start_node "AccountNode1"
  67. echo "========================================"
  68. echo " 公共服启动完成"
  69. echo "========================================"
  70. ;;
  71. stop)
  72. stop)
  73. echo "========================================"
  74. echo " 停止公共服"
  75. echo "========================================"
  76. stop_node "AccountNode1"
  77. stop_node "PublicNode"
  78. stop_node "NameServer"
  79. echo "========================================"
  80. echo " 公共服已停止"
  81. echo "========================================"
  82. ;;
  83. restart)
  84. bash "$0" stop
  85. sleep 3
  86. bash "$0" start
  87. ;;
  88. status)
  89. echo "========================================"
  90. echo " 公共服状态"
  91. echo "========================================"
  92. status_node "NameServer"
  93. status_node "PublicNode"
  94. status_node "AccountNode1"
  95. echo "========================================"
  96. ;;
  97. log)
  98. local name=${2:-NameServer}
  99. local log_file="$LOG_DIR/${name,,}.log"
  100. if [ -f "$log_file" ]; then
  101. tail -f "$log_file"
  102. else
  103. echo -e "${RED}日志文件不存在:$log_file${NC}"
  104. fi
  105. ;;
  106. refresh-serverlist)
  107. echo -e "${GREEN}[REFRESH] 通知 AccountServer 重新拉取 serverlist.json ...${NC}"
  108. ADMIN_URL="http://127.0.0.1:18088/api/"
  109. BODY='{"callBackInfo":"{\"type\":\"server_list_refresh\"}"}'
  110. RSP=$(curl -s -X POST "$ADMIN_URL" -d "$BODY" -H "Content-Type: application/json" 2>&1)
  111. if echo "$RSP" | grep -q '"state":true'; then
  112. echo -e "${GREEN}[OK] serverlist.json 刷新成功${NC}"
  113. else
  114. echo -e "${RED}[FAIL] 刷新失败: $RSP${NC}"
  115. echo -e "${YELLOW}[TIP] 确保公共服已启动 (bash public.sh status)${NC}"
  116. fi
  117. ;;
  118. *)
  119. echo "用法: $0 {start|stop|restart|status|log [节点名]|refresh-serverlist}"
  120. echo ""
  121. echo " start 启动公共服 (NameServer → PublicNode → AccountNode1)"
  122. echo " stop 停止公共服 (AccountNode1 → PublicNode → NameServer)"
  123. echo " restart 重启公共服"
  124. echo " status 查看公共服状态"
  125. echo " log 查看日志 (默认NameServer)"
  126. echo " refresh-serverlist 通知AccountServer重新拉取serverlist.json(更新区服列表后执行)"
  127. exit 1
  128. ;;
  129. esac