gpt4 book ai didi

go - 如何在golang中查找sshd服务状态

转载 作者:IT王子 更新时间:2023-10-29 02:10:21 24 4
gpt4 key购买 nike

我有以下代码

package main

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

func main() {
cmd := exec.Command("systemctl", "check", "sshd")
out, err := cmd.CombinedOutput()
if err != nil {
fmt.Println("Cannot find process")
os.Exit(1)
}
fmt.Printf("Status is: %s", string(out))
fmt.Println("Starting Role")

如果服务关闭,程序将退出,虽然我想获得它的状态('down','inactive'等)

如果服务启动了,程序不会退出,会打印'active'输出

有什么提示吗?

最佳答案

如果 exec.Command 返回错误,您将退出,但您没有检查返回的错误类型。根据 docs :

If the command starts but does not complete successfully, the error is of type *ExitError. Other error types may be returned for other situations.

不只是退出,您应该检查错误是否对应于 systemctl 的非零退出代码或运行它的问题。这可以通过以下方式完成:

func main() {
cmd := exec.Command("systemctl", "check", "sshd")
out, err := cmd.CombinedOutput()
if err != nil {
if exitErr, ok := err.(*exec.ExitError); ok {
fmt.Printf("systemctl finished with non-zero: %v\n", exitErr)
} else {
fmt.Printf("failed to run systemctl: %v", err)
os.Exit(1)
}
}
fmt.Printf("Status is: %s\n", string(out))
}

关于go - 如何在golang中查找sshd服务状态,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48263281/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com