|
- 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)
-
- }
|