diff --git a/go.mod b/go.mod new file mode 100644 index 0000000..2ed6694 --- /dev/null +++ b/go.mod @@ -0,0 +1,3 @@ +module launch + +go 1.15 diff --git a/main.go b/main.go new file mode 100644 index 0000000..0a48755 --- /dev/null +++ b/main.go @@ -0,0 +1,153 @@ +package main + +import ( + "fmt" + "log" + "net/http" + "os" + "os/exec" + "time" +) + +func main() { + + lockdir:=os.Getenv("TSZDIR") + exitChannel := make(chan int, 10) + + //线程启动ipfs + fmt.Println("start ipfs") + + datapath := lockdir+"go-ipfs_v0.7.0_windows-amd64\\go-ipfs\\ipfs.exe" + ipfsCd := exec.Command(datapath,"daemon") + go func() { + err := ipfsCd.Run() + if err != nil { + fmt.Print("ipfs") + fmt.Println(err) + exitChannel <- 1 + } + }() + + //线程启动fts + fmt.Println("start fts") + datapath = lockdir+"bin\\fts.exe" + ftsCd := exec.Command(datapath) + go func() { + err := ftsCd.Run() + if err != nil { + fmt.Print("fts") + fmt.Println(err) + exitChannel <- 1 + } + }() + + //线程启动etcd + fmt.Println("start etcd") + datadir :=os.Getenv("APPDATA")+"\\"+"LOCKING" + datapath = lockdir+"etcd-v3.3.25-windows-amd64\\etcd.exe" + etcdCd := exec.Command(datapath,"--data-dir",datadir) + go func() { + err := etcdCd.Run() + if err != nil { + fmt.Print("etcd") + fmt.Println(err) + exitChannel <- 1 + } + }() + + //检测fts进程是否启动成功,最大超时5s + timeOutMax := 50 + timeOutIndex := 0 + for true { + resp, err := http.Get("http://127.0.0.1:7777") + + if err != nil { + if timeOutIndex>timeOutMax{ + fmt.Printf("http.Get()函数执行错误,错误为:%v\n", err) + exitChannel <- 1 + } + time.Sleep(100*time.Millisecond) + timeOutIndex++ + continue + } + defer resp.Body.Close() + break + } + + + //检测etcd进程是否启动成功,最大超时5s + timeOutMax = 50 + timeOutIndex = 0 + for true { + resp, err := http.Get("http://127.0.0.1:2379") + + if err != nil { + if timeOutIndex>timeOutMax{ + fmt.Printf("http.Get()函数执行错误,错误为:%v\n", err) + exitChannel <- 1 + } + time.Sleep(100*time.Millisecond) + timeOutIndex++ + continue + } + defer resp.Body.Close() + break + } + + //检测ipfs进程是否启动成功,最大超时10s + timeOutMax = 50 + timeOutIndex = 0 + for true { + resp, err := http.Get("http://127.0.0.1:5001") + + if err != nil { + if timeOutIndex>timeOutMax{ + fmt.Printf("http.Get()函数执行错误,错误为:%v\n", err) + exitChannel <- 1 + } + time.Sleep(200*time.Millisecond) + timeOutIndex++ + continue + } + defer resp.Body.Close() + break + } + + //启动客户端 + datapath = lockdir+"locking-client-win32-x64\\locking-client.exe" + lockingCd := exec.Command(datapath) + err := lockingCd.Start() + fmt.Println("start locking") + log.Println(lockingCd.Process.Pid) + if err != nil { + fmt.Println(err) + exitChannel <- 1 + } + + /*go func() { + for true{ + log.Println(cd.Process.Pid)//client 存活情况 + } + }()*/ + + //收取退出命令 + for i := range exitChannel { + if i==1{ + if ftsCd.Process !=nil{ + ftsCd.Process.Kill() + } + if ipfsCd.Process !=nil{ + ipfsCd.Process.Kill() + } + if etcdCd.Process !=nil{ + etcdCd.Process.Kill() + } + if lockingCd.Process !=nil{ + lockingCd.Process.Kill() + } + os.Exit(1) + } + } + os.Exit(1) + +}