diff --git a/src/framework/utils/cmd/cmd.go b/src/framework/utils/cmd/cmd.go index f4d70328..f26919f8 100644 --- a/src/framework/utils/cmd/cmd.go +++ b/src/framework/utils/cmd/cmd.go @@ -37,34 +37,6 @@ func Exec(cmdStr string) (string, error) { return stdout.String(), nil } -func ExecWithTimeOut(cmdStr string, timeout time.Duration) (string, error) { - ctx, cancel := context.WithTimeout(context.Background(), timeout) - defer cancel() - cmd := exec.Command("bash", "-c", cmdStr) - var stdout, stderr bytes.Buffer - cmd.Stdout = &stdout - cmd.Stderr = &stderr - err := cmd.Run() - if ctx.Err() == context.DeadlineExceeded { - return "", fmt.Errorf("errCmdTimeout %v", err) - } - if err != nil { - errMsg := "" - if len(stderr.String()) != 0 { - errMsg = fmt.Sprintf("stderr: %s", stderr.String()) - } - if len(stdout.String()) != 0 { - if len(errMsg) != 0 { - errMsg = fmt.Sprintf("%s; stdout: %s", errMsg, stdout.String()) - } else { - errMsg = fmt.Sprintf("stdout: %s", stdout.String()) - } - } - return errMsg, err - } - return stdout.String(), nil -} - func ExecCronjobWithTimeOut(cmdStr string, workdir string, timeout time.Duration) (string, error) { ctx, cancel := context.WithTimeout(context.Background(), timeout) defer cancel() @@ -92,6 +64,7 @@ func ExecCronjobWithTimeOut(cmdStr string, workdir string, timeout time.Duration return errMsg, err } +// Execf 本地执行命令 列如:("ssh %s@%s", "user", "localhost") func Execf(cmdStr string, a ...interface{}) (string, error) { cmd := exec.Command("bash", "-c", fmt.Sprintf(cmdStr, a...)) var stdout, stderr bytes.Buffer @@ -115,6 +88,36 @@ func Execf(cmdStr string, a ...interface{}) (string, error) { return stdout.String(), nil } +// ExecWithTimeOut 本地执行命令超时退出 列如:("ssh user@localhost", 20*time.Second) +func ExecWithTimeOut(cmdStr string, timeout time.Duration) (string, error) { + ctx, cancel := context.WithTimeout(context.Background(), timeout) + defer cancel() + cmd := exec.Command("bash", "-c", cmdStr) + var stdout, stderr bytes.Buffer + cmd.Stdout = &stdout + cmd.Stderr = &stderr + err := cmd.Run() + if ctx.Err() == context.DeadlineExceeded { + return "", fmt.Errorf("errCmdTimeout %v", err) + } + if err != nil { + errMsg := "" + if len(stderr.String()) != 0 { + errMsg = fmt.Sprintf("stderr: %s", stderr.String()) + } + if len(stdout.String()) != 0 { + if len(errMsg) != 0 { + errMsg = fmt.Sprintf("%s; stdout: %s", errMsg, stdout.String()) + } else { + errMsg = fmt.Sprintf("stdout: %s", stdout.String()) + } + } + return errMsg, err + } + return stdout.String(), nil +} + +// ExecWithCheck 执行命令程序带参数 例如:("ls", "-r", "-l", "-s") func ExecWithCheck(name string, a ...string) (string, error) { cmd := exec.Command(name, a...) var stdout, stderr bytes.Buffer