| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140 |
- #!/bin/bash
- # =====================================================
- # 公共服管理脚本(NameServer + PublicNode + AccountNode)
- # =====================================================
- SCRIPT_DIR="$(cd "$(dirname "$0")" && pwd)"
- CFG="$SCRIPT_DIR/_launch_public.xml"
- BASE_DIR="/data/CzServer/_output.server"
- DLL="$BASE_DIR/OpenCards.Server.DotNetCore.dll"
- LOG_DIR="$BASE_DIR/logfile"
- GREEN='\033[0;32m'
- RED='\033[0;31m'
- YELLOW='\033[1;33m'
- NC='\033[0m'
- mkdir -p "$LOG_DIR"
- is_running() {
- pgrep -f "$CFG $1" > /dev/null 2>&1
- }
- start_node() {
- local name=$1
- local extra=$2
- local log_file="$LOG_DIR/${name,,}.log"
- if is_running "$name"; then
- echo -e "${YELLOW}[SKIP] $name 已在运行${NC}"
- return 0
- fi
- echo -e "${GREEN}[START] $name ...${NC}"
- nohup dotnet "$DLL" "$CFG" $name $extra >> "$log_file" 2>&1 &
- sleep 3
- if is_running "$name"; then
- echo -e "${GREEN}[OK] $name 启动成功 (PID: $(pgrep -f "$CFG $name"))${NC}"
- else
- echo -e "${RED}[FAIL] $name 启动失败,查看日志:$log_file${NC}"
- tail -20 "$log_file"
- return 1
- fi
- }
- stop_node() {
- local name=$1
- local pid=$(pgrep -f "$CFG $name" 2>/dev/null)
- if [ -n "$pid" ]; then
- echo -e "${YELLOW}[STOP] $name (PID: $pid)${NC}"
- kill $pid
- sleep 1
- if pgrep -f "$CFG $name" > /dev/null 2>&1; then
- kill -9 $pid 2>/dev/null
- fi
- else
- echo -e "${YELLOW}[SKIP] $name 未在运行${NC}"
- fi
- }
- status_node() {
- local name=$1
- if is_running "$name"; then
- echo -e "${GREEN}[UP] $name (PID: $(pgrep -f "$CFG $name"))${NC}"
- else
- echo -e "${RED}[DOWN] $name${NC}"
- fi
- }
- case "${1:-start}" in
- start)
- echo "========================================"
- echo " 启动公共服 (NameServer → PublicNode → AccountNode)"
- echo "========================================"
- start_node "NameServer"
- start_node "PublicNode"
- start_node "AccountNode1"
- echo "========================================"
- echo " 公共服启动完成"
- echo "========================================"
- ;;
- stop)
- stop)
- echo "========================================"
- echo " 停止公共服"
- echo "========================================"
- stop_node "AccountNode1"
- stop_node "PublicNode"
- stop_node "NameServer"
- echo "========================================"
- echo " 公共服已停止"
- echo "========================================"
- ;;
- restart)
- bash "$0" stop
- sleep 3
- bash "$0" start
- ;;
- status)
- echo "========================================"
- echo " 公共服状态"
- echo "========================================"
- status_node "NameServer"
- status_node "PublicNode"
- status_node "AccountNode1"
- echo "========================================"
- ;;
- log)
- local name=${2:-NameServer}
- local log_file="$LOG_DIR/${name,,}.log"
- if [ -f "$log_file" ]; then
- tail -f "$log_file"
- else
- echo -e "${RED}日志文件不存在:$log_file${NC}"
- fi
- ;;
- refresh-serverlist)
- echo -e "${GREEN}[REFRESH] 通知 AccountServer 重新拉取 serverlist.json ...${NC}"
- ADMIN_URL="http://127.0.0.1:18088/api/"
- BODY='{"callBackInfo":"{\"type\":\"server_list_refresh\"}"}'
- RSP=$(curl -s -X POST "$ADMIN_URL" -d "$BODY" -H "Content-Type: application/json" 2>&1)
- if echo "$RSP" | grep -q '"state":true'; then
- echo -e "${GREEN}[OK] serverlist.json 刷新成功${NC}"
- else
- echo -e "${RED}[FAIL] 刷新失败: $RSP${NC}"
- echo -e "${YELLOW}[TIP] 确保公共服已启动 (bash public.sh status)${NC}"
- fi
- ;;
- *)
- echo "用法: $0 {start|stop|restart|status|log [节点名]|refresh-serverlist}"
- echo ""
- echo " start 启动公共服 (NameServer → PublicNode → AccountNode1)"
- echo " stop 停止公共服 (AccountNode1 → PublicNode → NameServer)"
- echo " restart 重启公共服"
- echo " status 查看公共服状态"
- echo " log 查看日志 (默认NameServer)"
- echo " refresh-serverlist 通知AccountServer重新拉取serverlist.json(更新区服列表后执行)"
- exit 1
- ;;
- esac
|