我有以下代码
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'等)
如果服务已启动,程序将不会退出并将打印“有效”输出
请提供任何提示?
答案 0 :(得分:1)
如果exec.Command
返回错误,您将退出,但是您没有检查返回的错误类型。
根据{{3}}:
如果命令启动但未成功完成,则错误为 类型* ExitError。其他错误类型可能会返回 的情况。
您应该检查错误是否与来自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))
}