123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112 |
- package auto
- import (
- "fmt"
- "strings"
- "time"
- "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) {
- if serverNodeConfig.XuguAddr != "" {
- //删除stdout.txt文件
- _, err := remote.SingleCmd(&serverNodeConfig, fmt.Sprintf("rm -f %s/BIN/stdout.txt", serverNodeConfig.XuguAddr))
- if err != nil {
- global.Logs.Errorf("删除%s节点stdout.txt文件失败\n", serverNodeId)
- }
- 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 {
- //等待5秒进行第二次查询
- time.Sleep(5 * time.Second)
- if checkXuguPort(&serverNodeConfig) {
- global.Logs.Infof("启动%s节点数据库成功\n", serverNodeId)
- } else {
- global.Logs.Errorf("启动%s节点数据库失败\n", serverNodeId)
- //对stdout.txt查询
- ret, err := remote.SingleCmd(&serverNodeConfig, fmt.Sprintf("cat %s/BIN/stdout.txt", serverNodeConfig.XuguAddr))
- if err != nil {
- global.Logs.Errorf("查询%s节点数据库stdout.txt文件失败\n", serverNodeId)
- }
- global.Logs.Printf("查询%s节点数据库stdout.txt : %s\n", serverNodeId, ret)
- }
- }
- }
- 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
- }
- }
|