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

---
 main.go              |   28 ++++++++++++++++++++++++++++
 app/master/reaper.go |    2 ++
 2 files changed, 30 insertions(+), 0 deletions(-)

diff --git a/app/master/reaper.go b/app/master/reaper.go
index 6ea3cc1..529e3d0 100644
--- a/app/master/reaper.go
+++ b/app/master/reaper.go
@@ -60,6 +60,8 @@
 	pid := -1
 	cmd.Stdout = os.Stdout
 	cmd.Stderr = os.Stderr
+	cmd.SysProcAttr = &syscall.SysProcAttr{Pdeathsig: syscall.SIGTERM}
+
 	err := cmd.Start()
 	if err == nil {
 		pid = cmd.Process.Pid
diff --git a/main.go b/main.go
index 097b036..02e2e6c 100644
--- a/main.go
+++ b/main.go
@@ -3,9 +3,13 @@
 import (
 	"analysis/logo"
 	"analysis/util"
+	"fmt"
+	"os/exec"
 	"os/signal"
+	"runtime/debug"
 	"strconv"
 	"syscall"
+	"time"
 
 	"analysis/app/master"
 	"analysis/app/slave"
@@ -107,6 +111,7 @@
 
 	ret := false
 	if role == roleMaster {
+		defer dump(util.LogFile + "_dump_" + time.Now().Format("20060102150405"))
 		setParamters()
 		ret = master.Run(ctx, "./libcomm.so", configPath)
 
@@ -138,3 +143,26 @@
 // viper.AddConfigPath("./")
 
 // envString := ""
+
+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