linux - 使用 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).
推荐阅读
- python - 两个或多个 DataFrame 列的交集
- css - 如何在 SCSS 中显示/隐藏兄弟跨度?
- javascript - Highcharts 流图 - 如何按 Y 轴进行 1:1 缩放?
- php - 如何在 Laravel 的 Job 中使用 SoapClient 类?
- javascript - 如何恢复 Vue-Drag-Resize 拖动事件
- python - 使用 python 处理我的 csv 文件的两个问题
- css - 使用 nth-child() 选择器更改 JUST 行背景
- python - 创建一个带有 matplotlib 的表、带有浮点数的列和其他带有字符串的列?
- r - 从列表中计算序列
- ruby-on-rails - Ruby on Rails 请求/查询超时