2017-05-31 125 views
0

我在写一个GO脚本来检查Mongo服务器是否在运行。我的代码是,GOLANG检查mongodb是否在运行

import "bytes" 
import "os/exec" 
import "fmt" 

func main() { 
    cmd := exec.Command("ps", "-ef", "|", "grep", "mongod", "|", "grep", "-v", "grep", "|", "wc", "-l", "|", "tr", "-d", "'", "'") 

    fmt.Println(cmd) 
    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()) 
     return 
    } 
    fmt.Println("Result: " + out.String()) 
} 

但是出现错误为“退出状态1:错误:垃圾选项”。 有没有其他的方法来检查这与高隆?请告诉我。

+0

在这里你可以找到一个用bash启动mongodb的start_stop_restart小程序。还有一个非常简短的命令:) https://github.com/patrick0585/Mongo_Start_Stop/blob/master/mongo_start_stop.sh你的命令可以是ps -ef | awk/[m] ongodb/ –

+0

也许这篇文章将帮助你如何检查golang进程是如何运行的。 https://stackoverflow.com/questions/15204162/check-if-a-process-exists-in-go-way –

+0

@ Patrick85但如何获得与脚本的PID,因为它仍然返回与短命令相同的错误,以及.. – Priyanka

回答

0

如果你想超越移植一个bash脚本去(这往往是更多的麻烦比它的价值),你可以使用mgo library真正连接到MongoDB实例,并检查它是否健康:

package main 

import (
    "gopkg.in/mgo.v2" 
    "fmt" 
    "os" 
) 

func main() { 
    sess, err := mgo.Dial("localhost") 
    if err != nil { 
     fmt.Println(err) 
     os.Exit(1) 
    } 
    defer sess.Close() 
    err = sess.Ping() 
    if err != nil { 
     fmt.Println(err) 
     os.Exit(1) 
    } 
    fmt.Println("MongoDB server is healthy.") 
    os.Exit(0) 
} 
+0

我相信你打算在这里提供一个链接? –

+0

好的。今天早上我正在经历咖啡因缺乏症。 – Adrian

+0

@Adrian其实我的目标是重新启动mongo服务器,如果它停机。我想我不能用mgo库实现这一点。可能吗? – Priyanka