package auto import ( "fmt" "strings" "xg_auto_deploy/internal/config" "xg_auto_deploy/internal/global" "xg_auto_deploy/internal/models" "xg_auto_deploy/internal/remote" ) func StartAll() { for NodeId, nodeTemp := range global.ServerNodeConfigs { global.Logs.Infoln("----------------开始启动服务器----------------------------") wg.Add(1) go func(serverNodeConfig models.ServerNodeConfig, serverNodeId string) { fmt.Println("serverNodeConfig.XuguAddr: ", serverNodeConfig.XuguAddr) if serverNodeConfig.XuguAddr != "" { xgBin := findXuguBin(&serverNodeConfig) //fmt.Println("启动服务器:", serverNodeId) cmd := fmt.Sprintf("stdbuf -o0 %s/BIN/%s -service ", serverNodeConfig.XuguAddr, xgBin) //cmd := fmt.Sprintf("%s/BIN/xugu_cluster_linux_aarch64_20240416 -service > /dev/null ", serverNodeConfig.XuguAddr) global.Logs.Infof("%s节点执行命令%s\n", serverNodeId, cmd) ret, err := remote.SingleCmdTime(&serverNodeConfig, cmd) if err != nil { global.Logs.Errorf("启动%s节点数据库失败\n", serverNodeId) } else { global.Logs.Infof("%s节点执行命令返回: %s", serverNodeId, ret) } if checkXuguPort(&serverNodeConfig) { global.Logs.Infof("启动%s节点数据库成功\n", serverNodeId) } else { global.Logs.Errorf("启动%s节点数据库失败\n", serverNodeId) } } defer wg.Done() }(nodeTemp, NodeId) } wg.Wait() } func findXuguBin(serverNodeConfig *models.ServerNodeConfig) string { cmd := fmt.Sprintf("cd %s/BIN/ && ls", serverNodeConfig.XuguAddr) global.Logs.Infoln("执行命令:", cmd) input, err := remote.SingleCmd(serverNodeConfig, cmd) if err != nil { global.Logs.Errorf("查找虚谷BIN文件出错 Error:\n", err) } items := strings.Split(input, "\n") var result []string // 过滤掉包含 "init"、"console" 和 ".sh" 的字符串 for _, str := range items { if !strings.Contains(str, "init") && !strings.Contains(str, "console") && !strings.HasSuffix(str, ".sh") { result = append(result, str) } } // 将结果数组重新组合为字符串 //output := `"` + strings.Join(result, `", "`) + `"` return result[0] } func checkXuguPort(serverNodeConfig *models.ServerNodeConfig) bool { xuguIniDownloadTempbuf := remote.DownloadFileBuffer(serverNodeConfig, fmt.Sprintf(serverNodeConfig.XuguAddr+"/SETUP/xugu.ini")) keyToFind := "listen_port" port, err := config.GetXginiValue(xuguIniDownloadTempbuf, keyToFind) if err != nil { global.Logs.Errorf("查找虚谷ini配置文件出错 Error:\n", err) } remote.SingleCmd(serverNodeConfig, "chmod -R +x "+serverNodeConfig.XuguAddr) ret, err := remote.SingleCmdTime(serverNodeConfig, "lsof -i:"+port) if err != nil { //fmt.Println("执行命令失败:", err) return false } else { global.Logs.Infoln("执行命令返回 ret:", ret) return true } }