使用golang调用systemd-coredump程序失败

问题描述

我正在尝试使用golang调用systemd-coredump程序以生成核心转储,但是它以某种原因失败,并显示no such file or directory错误。 我正在将这段代码容器化,并将其部署为kubernetes中的Pod。

Kubernetes具有rhel 7.6版

这是我的代码:

package main
import (
    "os/exec"
    "os"
    "fmt"
)

func main(){

  coreProcessID := "<some process id>"
  partialCmd := "<arguments for core dump like %u %g %s %t %c %E>"
  coreCmd := "/usr/lib/systemd/systemd-coredump " + coreProcessID + " " + partialCmd
  fmt.Println("coreCmd is ",coreCmd)
        cmd := exec.Command(coreCmd)
        output,err := cmd.CombinedOutput()
        if err != nil {
            fmt.Println(fmt.Sprint(err) + ": " + string(output))
        } else {
            fmt.Println(string(output))
        }
}

我收到此错误:fork/exec /usr/lib/systemd/systemd-coredump 59009 %u %g %s %t %c %E: no such file or directory: 我什至尝试使用syscall.Exec,但它只是退出程序而没有任何错误或输出。

在Python中,使用os.system(core_cmd)可以很好地工作,但对于golang则以某种方式失败。 如何使用golang调用systemd-coredump程序?

尝试以下更改

cmd := exec.Command(coreCmd,coreProcessID,partialCmd)
        var out bytes.Buffer
        var stderr bytes.Buffer
        cmd.Stdout = &out
        cmd.Stderr = &stderr
        err := cmd.Run()
        if err != nil {
            fmt.Println(fmt.Sprint(err) + ": " + stderr.String())
        }
        fmt.Println("Result: " + out.String())

但是它不会检索输出或生成核心转储

解决方法

如果像这样想象,您的原始示例在某种程度上可以工作

import (
    "fmt"
    "os"
    "os/exec"
    "strings"
)

func main() {

    coreProcessID := os.Args[1]
    partialCmd := "%u %g %s %t %c %E"
    coreCmdArgs := coreProcessID + " " + partialCmd
    fmt.Println("coreCmdArgs are ",coreCmdArgs)
    coreCmdArgsAsSlice := strings.Split(" ",coreCmdArgs)
    cmd := exec.Command("/usr/lib/systemd/systemd-coredump",coreCmdArgsAsSlice...)
    output,err := cmd.CombinedOutput()
    if err != nil {
        fmt.Println(fmt.Sprint(err) + ": " + string(output))
    } else {
        fmt.Println(string(output))
    }
}

我系统上的上述内容给出了此错误,这大概是由于systemd-coredump的工作方式

coreCmdArgs are  885 %u %g %s %t %c %E
exit status 1: Not enough arguments passed by the kernel (1,expected 6).

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...