package main import ( "bytes" "fmt" "io/ioutil" "net/http" "os/exec" "time" ) func main() { oldPeers := GetOldPeers() fmt.Println("oldPeers: ", oldPeers) newPeers := GetNewPeers() fmt.Println("newPeers: ", newPeers) UpdatePeers(oldPeers, newPeers) time.Sleep(time.Second * 3) nowPeers := GetOldPeers() fmt.Println("nowPeers: ", nowPeers) } func GetOldPeers() string { str := "cat /opt/vasystem/seaweedfs_start.sh | grep peers=" peers := RunScript(str) return peers } func GetNewPeers() string { getUrl := "http://192.168.20.10:9200/basicfs/_search" getJson := `{ "query": { "bool": { "filter": [ { "term": { "application":"nodeOperation" } } ] } }, "size": 1 }` getRes, _ := EsReq("POST", getUrl, []byte(getJson)) fmt.Println(getRes) return "" } func UpdatePeers(oldPeers string, newPeers string) { str := "sed -ie 's/" + oldPeers + "/" + newPeers + "/g' /opt/vasystem/seaweedfs_start.sh" RunScript(str) } //脚本封装 func RunScript(str string) string { cmd := exec.Command("sh", "-c", str) var out bytes.Buffer cmd.Stdout = &out err := cmd.Run() if err != nil { return "运行失败" } return out.String() } //解析http func EsReq(method string, url string, parama []byte) (buf []byte, err error) { timeout := time.Duration(10 * time.Second) client := http.Client{ Timeout: timeout, } request, err := http.NewRequest(method, url, bytes.NewBuffer(parama)) request.Header.Set("Content-type", "application/json") if err != nil { fmt.Println("build request fail !") return nil, err } resp, err := client.Do(request) if err != nil { fmt.Println("request error: ", err) return nil, err } defer resp.Body.Close() body, err := ioutil.ReadAll(resp.Body) if err != nil { fmt.Println(err) return nil, err } return body, nil }