千家信息网

如何配置go根据端口号启动程序,并守护该进程

发表于:2025-02-04 作者:千家信息网编辑
千家信息网最后更新 2025年02月04日,本篇内容介绍了"如何配置go根据端口号启动程序,并守护该进程"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有
千家信息网最后更新 2025年02月04日如何配置go根据端口号启动程序,并守护该进程

本篇内容介绍了"如何配置go根据端口号启动程序,并守护该进程"的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

func main() {   fmt.Println("--------开始每十秒检测进程是否启动-------")   c := cron.New()   c.AddFunc("@every 10s", portMonitoring)   c.Start()   select {}}func portMonitoring(){   config := commom.InitConfig("./config/test1.txt")   pidname := config["portOrPid"]   arr:=strings.Split(pidname,",")   portname := config["portAndName"]   portnameArr:=strings.Split(portname,",")   for i,item := range arr{      port, _ :=strconv.Atoi(item)      if portInUse(port) == -1 {         println("程序监测到程序未启动,5秒后开始启动应用程序")         fmt.Println("程序启动中...")         time.Sleep(time.Duration(5)*time.Second)         autoStart(portnameArr[i])      }else {         fmt.Print("进程运行中!-------端口号:",port,"运行信息:(cpu 内存 名称 创建时间)****")         fmt.Println(getPidInfo(int32(portInUse(port))))      }   }}func portInUse(portNumber int) int {   res := -1   var outBytes bytes.Buffer   cmdStr := fmt.Sprintf("netstat -ano -p tcp | findstr %d", portNumber)   cmd := exec.Command("cmd", "/c", cmdStr)   cmd.Stdout = &outBytes   cmd.Run()   resStr := outBytes.String()   r := regexp.MustCompile(`\s\d+\s`).FindAllString(resStr, -1)   if len(r) > 0 {      pid, err := strconv.Atoi(strings.TrimSpace(r[0]))      if err != nil {         res = -1      } else {         res = pid      }   }   return res}func getPidInfo(pid int32) (float64, float32, string, int64) {   var rootProcess *process.Process   processes, _ := process.Processes()   for _, p := range processes {      if p.Pid == pid {         rootProcess = p         break      }   }   info,_ :=rootProcess.CPUPercent()//cpu   info2,_ :=rootProcess.MemoryPercent()//内存   info3,_ :=rootProcess.Name()//名称   info4,_ :=rootProcess.CreateTime()//名称   return info,info2,info3,info4}func autoStart(name string)  {   cmd := exec.Command("cmd.exe", "/c", "start lnk/" + name)   err := cmd.Run()   if err != nil {      fmt.Printf("error:%v \n", err)   }else {      fmt.Printf("%s  \n", name)   }}

//文件目录

config    test1.txtlnk    startup

//配置文件

//应用程序端口号portOrPid=8989//应用程序对应得快捷方式portAndName=startup.lnk

//多应用程序监听,直接逗号分割

//监测tomcat,redisportOrPid=8989,6379portAndName=startup.lnk,redis-server.lnk

//配置文件读取

//读取key=value类型的配置文件func InitConfig(path string) map[string]string {   config := make(map[string]string)   f, err := os.Open(path)   defer f.Close()   if err != nil {      panic(err)   }   r := bufio.NewReader(f)   for {      b, _, err := r.ReadLine()      if err != nil {         if err == io.EOF {break         }         panic(err)      }      s := strings.TrimSpace(string(b))      index := strings.Index(s, "=")      if index < 0 {         continue      }      key := strings.TrimSpace(s[:index])      if len(key) == 0 {         continue      }      value := strings.TrimSpace(s[index+1:])      if len(value) == 0 {         continue      }      config[key] = value   }   return config}

//程序运行效果

"如何配置go根据端口号启动程序,并守护该进程"的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注网站,小编将为大家输出更多高质量的实用文章!

0