脚本命令执行永远挂在 Go 程序中


func Run() error {
log.Info("In Run Command")
cmd := exec.Command("bash", "/opt/AlterKafkaTopic.sh")
stdout, err := cmd.StdoutPipe()
if err != nil {
return err
}
if err = cmd.Start(); err != nil {
return err
}
f, err := os.Create(filepath.Join("/opt/log/", "execution.log"))
if err != nil {
return err
}
if _, err := io.Copy(f, stdout); err != nil {
return err
}
if err := cmd.Wait(); err != nil {
return err
}
return f.Close()

}

我正在尝试从 go 代码执行 bash 脚本。该脚本更改了一些 kafka 主题属性。但是执行被挂io.Copy(f, stdout),之后不会继续。 该程序在 RHEL7.2 服务器上运行。

有人可以建议我哪里出错了吗

从文档中:

等待将在看到命令退出后关闭管道。

换句话说,io。当调用 Wait(( 时,Copy 退出,但永远不会调用 Wait,因为它被 Copy 阻止了。 要么在 goroutine中运行 Copy,要么简单地将f分配给cmd.Stdout

f, err := os.Create(filepath.Join("/opt/log/", "execution.log"))
// TODO: Handle error
defer f.Close()
cmd := exec.Command("bash", "/opt/AlterKafkaTopic.sh")
cmd.Stdout = f
err = cmd.Run()

最新更新