diff --git a/src/modules/network_element/service/ne_version.go b/src/modules/network_element/service/ne_version.go index 93b42e5c..5729c11b 100644 --- a/src/modules/network_element/service/ne_version.go +++ b/src/modules/network_element/service/ne_version.go @@ -3,8 +3,10 @@ package service import ( "fmt" "os" + "os/exec" "path/filepath" "strings" + "syscall" "time" "be.ems/src/framework/cmd" @@ -267,10 +269,18 @@ func (r NeVersion) operateCommand(action, neType string, neFilePaths []string) ( } // 删除软件包 omcStrArr = append(omcStrArr, fmt.Sprintf("sudo rm %s", strings.Join(neFilePaths, " "))) - file.WriterFileTXT(fmt.Sprintf("#!/bin/bash \n%s", strings.Join(omcStrArr, " && ")), "/tmp/operate_omc.sh") + + // file.WriterFileTXT(fmt.Sprintf("#!/bin/bash \n%s", strings.Join(omcStrArr, " && ")), "/tmp/operate_omc.sh") + // 使用 nohup 启动进程 + cmd := exec.Command("nohup", "sh", "-c", fmt.Sprintf("sleep 2s && %s", strings.Join(omcStrArr, " && ")), "&") + cmd.SysProcAttr = &syscall.SysProcAttr{ + Setpgid: true, // 使进程脱离父进程的进程组 + } + cmd.Start() // 启动子进程 + // 2s后执行omc相关命令 - cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo rm -f /tmp/operate_run_%s_omc.out \n", action)) - cmdStrArr = append(cmdStrArr, fmt.Sprintf("bash /tmp/operate_omc.sh > /tmp/operate_run_%s_omc.out 2>&1 & \n", action)) + // cmdStrArr = append(cmdStrArr, fmt.Sprintf("sudo rm -f /tmp/operate_run_%s_omc.out \n", action)) + // cmdStrArr = append(cmdStrArr, fmt.Sprintf("bash /tmp/operate_omc.sh > /tmp/operate_run_%s_omc.out 2>&1 & \n", action)) cmdStrArr = append(cmdStrArr, fmt.Sprintf("echo '%s' \n", okFlagStr)) return okFlagStr, cmdStrArr, nil } else if neType == "IMS" {