#!/bin/bash single_server_name=$1 go mod tidy go mod vendor find /tmp/go-build* -mmin +5 -exec rm -rf {} + find /tmp/go-link* -mmin +5 -exec rm -rf {} + run_proxyserver() { # 定义目录和screen名称 dir_path="./proxyserver" screen_name="proxyserver" # 进入目录 cd $dir_path # 检查是否存在screen session if screen -list | grep -q "$screen_name"; then # 结束存在的screen session screen -S $screen_name -X quit fi go build # 启动新的screen session并运行go程序 echo "run $screen_name" screen -dmS $screen_name -L ./$screen_name } # 定义一个函数来在每个服务器目录下运行 go run .go run_server() { server_name=$1 # 导航到相应的目录 cd server/$server_name echo "build $server_name" go build # 如果之前存在相同名字的 screen 会话,先将其终止 # 首先尝试关闭已存在的screen会话 existing_session=$(screen -ls | grep -w "$server_name") if [ -n "$existing_session" ]; then echo "Terminating existing screen session for $server_name" screen -S "$server_name" -X quit while [[ $(screen -ls | grep "\.$server_name\s") ]]; do sleep 0.1s # 等待0.1秒后再次检查 echo "wait for $server_name" done fi # 循环检查screen进程是否存在 [ -f .gitignore ] || echo $server_name > .gitignore # 使用 screen 运行 go run .go echo "Running $server_name" screen -dmS $server_name -L ./$server_name # 返回到上一级目录 cd - > /dev/null } if [ "$single_server_name" = "proxyserver" ]; then # 重启proxyserver的逻辑 run_proxyserver else server_dirs=() # 初始化一个空数组 if [ -n "$single_server_name" ]; then server_dirs=("$single_server_name") else for dir in server/*/ ; do # 遍历 "server/" 下的所有子目录 dir=${dir%*/} # 删除末尾的 "/" dir=${dir##*/} # 删除开头的 "server/" server_dirs+=("$dir") # 添加到数组 done fi # 在每个服务器目录下运行相应的 go 程序 for server_dir in "${server_dirs[@]}"; do run_server $server_dir done if [ -n "$single_server_name" ]; then echo "no proxyserver restart" else run_proxyserver fi fi