From 0613a9e6306026713501d90b9d02fb7ffbebf054 Mon Sep 17 00:00:00 2001
From: zhangmeng <775834166@qq.com>
Date: 星期二, 31 十二月 2019 13:30:58 +0800
Subject: [PATCH] add restart

---
 main.go |   29 +++++++++++++++++++++++++++++
 1 files changed, 29 insertions(+), 0 deletions(-)

diff --git a/main.go b/main.go
index 156b723..b71a68f 100644
--- a/main.go
+++ b/main.go
@@ -4,12 +4,16 @@
 	"analysis/logo"
 	"analysis/proc"
 	"analysis/util"
+	"fmt"
+	"runtime/debug"
 	"strconv"
+	"time"
 
 	"context"
 	"flag"
 
 	"os"
+	"os/exec"
 	"os/signal"
 
 	"golang.org/x/sys/unix"
@@ -147,6 +151,8 @@
 	if role == single {
 		ret = proc.SingleRole(ctx, runType, id, gpu, shm)
 	} else if role == master {
+		defer dump(util.LogFile + "_dump_" + time.Now().Format("20060102150405"))
+
 		setParamters()
 		ret = proc.MasterRole(ctx)
 	} else if role == slave {
@@ -164,3 +170,26 @@
 	gosdk.Free()
 	logo.Close()
 }
+
+func dump(dumpFile string) {
+	dumpErr := recover()
+	if dumpErr == nil {
+		return
+	}
+	f, err := os.Create(dumpFile)
+	if err != nil {
+		return
+	}
+	f.WriteString(fmt.Sprintf("panic:\r\n%v", dumpErr))
+	f.WriteString("\r\n\nstack:\r\n")
+	f.WriteString(string(debug.Stack()))
+	f.Close()
+
+	//////////////////////////////////////////////
+	// restart master
+
+	cmd := exec.Command(os.Args[0], os.Args[1:]...)
+	cmd.Stdout = os.Stdout
+	cmd.Stderr = os.Stderr
+	cmd.Start()
+}

--
Gitblit v1.8.0