|
|
|
@ -4,6 +4,7 @@ import (
|
|
|
|
|
"bytes"
|
|
|
|
|
"context"
|
|
|
|
|
"fmt"
|
|
|
|
|
"io"
|
|
|
|
|
"os/exec"
|
|
|
|
|
"strings"
|
|
|
|
|
"time"
|
|
|
|
@ -88,24 +89,19 @@ func ExecCronjobWithTimeOut(cmdStr string, workdir string, timeout time.Duration
|
|
|
|
|
var stdout, stderr bytes.Buffer
|
|
|
|
|
cmd.Stdout = &stdout
|
|
|
|
|
cmd.Stderr = &stderr
|
|
|
|
|
output := new(bytes.Buffer)
|
|
|
|
|
cmd.Stdout = io.MultiWriter(output, cmd.Stdout)
|
|
|
|
|
cmd.Stderr = io.MultiWriter(output, cmd.Stderr)
|
|
|
|
|
|
|
|
|
|
err := cmd.Run()
|
|
|
|
|
if ctx.Err() == context.DeadlineExceeded {
|
|
|
|
|
return "", buserr.New(constant.ErrCmdTimeout)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
errMsg := ""
|
|
|
|
|
if len(stderr.String()) != 0 {
|
|
|
|
|
errMsg = fmt.Sprintf("stderr:\n%s", stderr.String())
|
|
|
|
|
err = buserr.New(constant.ErrBashExecute)
|
|
|
|
|
}
|
|
|
|
|
if len(stdout.String()) != 0 {
|
|
|
|
|
if len(errMsg) != 0 {
|
|
|
|
|
errMsg = fmt.Sprintf("%s \n\n stdout:\n%s", errMsg, stdout.String())
|
|
|
|
|
} else {
|
|
|
|
|
errMsg = fmt.Sprintf("stdout:\n %s", stdout.String())
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
return errMsg, err
|
|
|
|
|
return output.String(), err
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
func Execf(cmdStr string, a ...interface{}) (string, error) {
|
|
|
|
|