|
@@ -0,0 +1,68 @@
|
|
|
+// mian
|
|
|
+package main
|
|
|
+
|
|
|
+import (
|
|
|
+ "bytes"
|
|
|
+ "flag"
|
|
|
+ "fmt"
|
|
|
+ "log"
|
|
|
+ "net/http"
|
|
|
+ "os/exec"
|
|
|
+ "strings"
|
|
|
+
|
|
|
+ //"syscall"
|
|
|
+ "time"
|
|
|
+)
|
|
|
+
|
|
|
+var (
|
|
|
+ api = "http://172.17.145.179:19281/_send/_mail"
|
|
|
+ to = "zhangjinkun@topnet.net.cn,maxiaoshan@topnet.net.cn"
|
|
|
+ lock = make(chan bool, 1)
|
|
|
+)
|
|
|
+
|
|
|
+func main() {
|
|
|
+ pidname := flag.String("pidname", "", "")
|
|
|
+ path := flag.String("path", "", "")
|
|
|
+ flag.Parse()
|
|
|
+ log.Println("path:", *path, "pidname:", *pidname)
|
|
|
+ go KeepStart(*pidname, *path)
|
|
|
+ <-lock
|
|
|
+}
|
|
|
+
|
|
|
+func KeepStart(pidname, path string) {
|
|
|
+ for {
|
|
|
+ cmd := exec.Command("/bin/sh", "-c", `cd `+path)
|
|
|
+ if err := cmd.Run(); err != nil {
|
|
|
+ log.Println("err: ", err.Error())
|
|
|
+ }
|
|
|
+ cmd = exec.Command("/bin/sh", "-c", `ps -ef | grep `+pidname)
|
|
|
+ var out bytes.Buffer
|
|
|
+ cmd.Stdout = &out
|
|
|
+ if err := cmd.Run(); err != nil {
|
|
|
+ log.Println("err: ", err.Error())
|
|
|
+ }
|
|
|
+ if !IsRunning(out.String(), pidname) {
|
|
|
+ log.Println("Is'n Running...")
|
|
|
+ SendMail()
|
|
|
+ lock <- true
|
|
|
+ break
|
|
|
+ } else {
|
|
|
+ log.Println("Is Running...")
|
|
|
+ }
|
|
|
+ time.Sleep(1 * time.Minute)
|
|
|
+ }
|
|
|
+}
|
|
|
+
|
|
|
+func IsRunning(out, pidname string) bool {
|
|
|
+ return strings.Contains(out, "./"+pidname)
|
|
|
+}
|
|
|
+
|
|
|
+func SendMail() {
|
|
|
+ for {
|
|
|
+ res, err := http.Get(fmt.Sprintf("%s?to=%s&title=%s&body=%s", api, to, "projectinfo-down-check", "项目预测挂了"))
|
|
|
+ if err == nil {
|
|
|
+ defer res.Body.Close()
|
|
|
+ break
|
|
|
+ }
|
|
|
+ }
|
|
|
+}
|