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