| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158 |
- #!/bin/bash
- BASE_DIR="/data/CzServer/_output.server"
- DEV_DIR="$BASE_DIR/dev"
- DLL="$BASE_DIR/OpenCards.Server.DotNetCore.dll"
- CFG="$DEV_DIR/_launch_server.xml"
- LOG_DIR="$BASE_DIR/logfile"
- GREEN='\033[0;32m'
- RED='\033[0;31m'
- YELLOW='\033[1;33m'
- NC='\033[0m'
- mkdir -p "$LOG_DIR"
- check_dotnet() {
- if ! command -v dotnet &> /dev/null; then
- echo -e "${RED}[ERROR] dotnet 未找到,请先安装 .NET 5.0${NC}"
- echo " mkdir -p \$HOME/dotnet && tar zxf dotnet-sdk-5.0.100-linux-x64.tar.gz -C \$HOME/dotnet"
- echo " export DOTNET_ROOT=\$HOME/dotnet && export PATH=\$PATH:\$HOME/dotnet"
- exit 1
- fi
- }
- is_running() {
- local name=$1
- pgrep -f "_launch_server.xml $name" > /dev/null 2>&1
- }
- start_node() {
- local name=$1
- local extra_args=$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}"
- cd "$DEV_DIR" || exit 1
- nohup dotnet "$DLL" "$CFG" $name $extra_args >> "$log_file" 2>&1 &
- sleep 3
- if is_running "$name"; then
- echo -e "${GREEN}[OK] $name 启动成功 (PID: $(pgrep -f "_launch_server.xml $name"))${NC}"
- else
- echo -e "${RED}[FAIL] $name 启动失败,查看日志:$log_file${NC}"
- tail -20 "$log_file"
- exit 1
- fi
- }
- stop_node() {
- local name=$1
- local pid
- pid=$(pgrep -f "_launch_server.xml $name")
- if [ -n "$pid" ]; then
- echo -e "${YELLOW}[STOP] $name (PID: $pid)${NC}"
- kill "$pid"
- else
- echo -e "${YELLOW}[SKIP] $name 未在运行${NC}"
- fi
- }
- status_node() {
- local name=$1
- if is_running "$name"; then
- local pid
- pid=$(pgrep -f "_launch_server.xml $name")
- echo -e "${GREEN}[UP] $name (PID: $pid)${NC}"
- else
- echo -e "${RED}[DOWN] $name${NC}"
- fi
- }
- cmd_start() {
- echo "========================================"
- echo " 启动游戏服务端"
- echo "========================================"
- check_dotnet
- start_node "NameServer"
- start_node "PublicNode"
- start_node "GameNode1" "global.RealmID=1 global.ServerID=1"
- start_node "AccountNode1"
- echo ""
- echo "========================================"
- echo " 全部节点启动完成"
- echo "========================================"
- }
- cmd_stop() {
- echo "========================================"
- echo " 停止游戏服务端"
- echo "========================================"
- # 反序停止
- stop_node "AccountNode1"
- stop_node "GameNode1"
- stop_node "PublicNode"
- stop_node "NameServer"
- sleep 2
- echo "========================================"
- echo " 全部节点已停止"
- echo "========================================"
- }
- cmd_restart() {
- cmd_stop
- sleep 3
- cmd_start
- }
- cmd_status() {
- echo "========================================"
- echo " 节点状态"
- echo "========================================"
- status_node "NameServer"
- status_node "PublicNode"
- status_node "GameNode1"
- status_node "AccountNode1"
- echo "========================================"
- }
- cmd_log() {
- local name=${1:-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
- }
- case "$1" in
- start) cmd_start ;;
- stop) cmd_stop ;;
- restart) cmd_restart ;;
- status) cmd_status ;;
- log) cmd_log "$2" ;;
- *)
- echo "用法: $0 {start|stop|restart|status|log [节点名]}"
- echo ""
- echo " start 启动所有节点"
- echo " stop 停止所有节点"
- echo " restart 重启所有节点"
- echo " status 查看各节点状态"
- echo " log NameServer 实时查看指定节点日志"
- echo " log PublicNode"
- echo " log GameNode1"
- echo " log AccountNode1"
- exit 1
- ;;
- esac
|