diff --git a/features/cm/software.go b/features/cm/software.go index 8df211d9..485d68bb 100644 --- a/features/cm/software.go +++ b/features/cm/software.go @@ -2,6 +2,7 @@ package cm import ( "bytes" + "context" "fmt" "io" "net/http" @@ -9,6 +10,7 @@ import ( "os/exec" "strconv" "strings" + "time" "ems.agt/lib/dborm" "ems.agt/lib/global" @@ -699,14 +701,17 @@ func ActiveSoftwareToNF(w http.ResponseWriter, r *http.Request) { } } else if fileType == 2 { dpkgCmd := fmt.Sprintf("sudo dpkg -i --force-all '%s'", filePath) - cmd := exec.Command("ssh", sshHost, dpkgCmd) + ctx, cancel := context.WithTimeout(context.Background(), 60*time.Second) // 设置60秒超时 + defer cancel() + cmd := exec.CommandContext(ctx, "ssh", sshHost, dpkgCmd) var stdout, stderr bytes.Buffer cmd.Stdout = &stdout cmd.Stderr = &stderr - - err := cmd.Run() + err := cmd.Start() if err != nil { log.Error("Faile to execute dpkg command: %v, err: %s", err, stderr.String()) + services.ResponseInternalServerError500ProcessError(w, err) + return } // out, err := cmd.CombinedOutput() // log.Debugf("Exec output: %v", string(out))