xugu_start.go 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495
  1. package auto
  2. import (
  3. "fmt"
  4. "strings"
  5. "xg_auto_deploy/internal/config"
  6. "xg_auto_deploy/internal/global"
  7. "xg_auto_deploy/internal/models"
  8. "xg_auto_deploy/internal/remote"
  9. )
  10. func StartAll() {
  11. for NodeId, nodeTemp := range global.ServerNodeConfigs {
  12. global.Logs.Infoln("----------------开始启动服务器----------------------------")
  13. wg.Add(1)
  14. go func(serverNodeConfig models.ServerNodeConfig, serverNodeId string) {
  15. fmt.Println("serverNodeConfig.XuguAddr: ", serverNodeConfig.XuguAddr)
  16. if serverNodeConfig.XuguAddr != "" {
  17. xgBin := findXuguBin(&serverNodeConfig)
  18. //fmt.Println("启动服务器:", serverNodeId)
  19. cmd := fmt.Sprintf("stdbuf -o0 %s/BIN/%s -service ", serverNodeConfig.XuguAddr, xgBin)
  20. //cmd := fmt.Sprintf("%s/BIN/xugu_cluster_linux_aarch64_20240416 -service > /dev/null ", serverNodeConfig.XuguAddr)
  21. global.Logs.Infof("%s节点执行命令%s\n", serverNodeId, cmd)
  22. ret, err := remote.SingleCmdTime(&serverNodeConfig, cmd)
  23. if err != nil {
  24. global.Logs.Errorf("启动%s节点数据库失败\n", serverNodeId)
  25. } else {
  26. global.Logs.Infof("%s节点执行命令返回: %s", serverNodeId, ret)
  27. }
  28. if checkXuguPort(&serverNodeConfig) {
  29. global.Logs.Infof("启动%s节点数据库成功\n", serverNodeId)
  30. } else {
  31. global.Logs.Errorf("启动%s节点数据库失败\n", serverNodeId)
  32. }
  33. }
  34. defer wg.Done()
  35. }(nodeTemp, NodeId)
  36. }
  37. wg.Wait()
  38. }
  39. func findXuguBin(serverNodeConfig *models.ServerNodeConfig) string {
  40. cmd := fmt.Sprintf("cd %s/BIN/ && ls", serverNodeConfig.XuguAddr)
  41. global.Logs.Infoln("执行命令:", cmd)
  42. input, err := remote.SingleCmd(serverNodeConfig, cmd)
  43. if err != nil {
  44. global.Logs.Errorf("查找虚谷BIN文件出错 Error:\n", err)
  45. }
  46. items := strings.Split(input, "\n")
  47. var result []string
  48. // 过滤掉包含 "init"、"console" 和 ".sh" 的字符串
  49. for _, str := range items {
  50. if !strings.Contains(str, "init") && !strings.Contains(str, "console") && !strings.HasSuffix(str, ".sh") {
  51. result = append(result, str)
  52. }
  53. }
  54. // 将结果数组重新组合为字符串
  55. //output := `"` + strings.Join(result, `", "`) + `"`
  56. return result[0]
  57. }
  58. func checkXuguPort(serverNodeConfig *models.ServerNodeConfig) bool {
  59. xuguIniDownloadTempbuf := remote.DownloadFileBuffer(serverNodeConfig, fmt.Sprintf(serverNodeConfig.XuguAddr+"/SETUP/xugu.ini"))
  60. keyToFind := "listen_port"
  61. port, err := config.GetXginiValue(xuguIniDownloadTempbuf, keyToFind)
  62. if err != nil {
  63. global.Logs.Errorf("查找虚谷ini配置文件出错 Error:\n", err)
  64. }
  65. remote.SingleCmd(serverNodeConfig, "chmod -R +x "+serverNodeConfig.XuguAddr)
  66. ret, err := remote.SingleCmdTime(serverNodeConfig, "lsof -i:"+port)
  67. if err != nil {
  68. //fmt.Println("执行命令失败:", err)
  69. return false
  70. } else {
  71. global.Logs.Infoln("执行命令返回 ret:", ret)
  72. return true
  73. }
  74. }