From 5ece9dc514b1fbba21e36a34f7fae42812e1d33a Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Paul=20B=C3=BCtow?= Date: Sun, 16 Feb 2020 18:07:36 +0000 Subject: server kills subprocesses correctly on cancel --- cmd/dserver/main.go | 39 ++++++++++++++++++--------------------- 1 file changed, 18 insertions(+), 21 deletions(-) (limited to 'cmd/dserver') diff --git a/cmd/dserver/main.go b/cmd/dserver/main.go index 03834f1..94f1a87 100644 --- a/cmd/dserver/main.go +++ b/cmd/dserver/main.go @@ -4,12 +4,13 @@ import ( "context" "flag" "os" + "os/signal" + "syscall" "time" "github.com/mimecast/dtail/internal/color" "github.com/mimecast/dtail/internal/config" "github.com/mimecast/dtail/internal/io/logger" - "github.com/mimecast/dtail/internal/pprof" "github.com/mimecast/dtail/internal/server" "github.com/mimecast/dtail/internal/user" "github.com/mimecast/dtail/internal/version" @@ -21,7 +22,6 @@ func main() { var debugEnable bool var displayVersion bool var noColor bool - var pprofEnable bool var shutdownAfter int var sshPort int @@ -30,7 +30,6 @@ func main() { flag.BoolVar(&debugEnable, "debug", false, "Activate debug messages") flag.BoolVar(&displayVersion, "version", false, "Display version") flag.BoolVar(&noColor, "noColor", false, "Disable ANSII terminal colors") - flag.BoolVar(&pprofEnable, "pprofEnable", false, "Enable pprof server") flag.IntVar(&shutdownAfter, "shutdownAfter", 0, "Automatically shutdown after so many seconds") flag.IntVar(&sshPort, "port", 2222, "SSH server port") flag.StringVar(&cfgFile, "cfg", "", "Config file path") @@ -44,30 +43,28 @@ func main() { version.PrintAndExit() } - ctx := context.Background() + ctx, cancel := context.WithCancel(context.Background()) + if shutdownAfter > 0 { + logger.Info("Enabling auto shutdown timer", shutdownAfter) + ctx, cancel = context.WithTimeout(ctx, time.Duration(shutdownAfter)*time.Second) + } + + sigCh := make(chan os.Signal) + signal.Notify(sigCh, os.Interrupt, syscall.SIGTERM) + + go func() { + select { + case <-sigCh: + cancel() + case <-ctx.Done(): + } + }() serverEnable := true silentEnable := false nothingEnable := false logger.Start(ctx, serverEnable, debugEnable, silentEnable, nothingEnable) - if shutdownAfter > 0 { - go func() { - defer os.Exit(1) - - logger.Info("Enabling auto shutdown timer", shutdownAfter) - select { - case <-time.After(time.Duration(shutdownAfter) * time.Second): - logger.Info("Auto shutdown timer reached, shutting down now") - case <-ctx.Done(): - } - }() - } - - if pprofEnable || config.Common.PProfEnable { - pprof.Start() - } - serv := server.New() status := serv.Start(ctx) logger.Flush() -- cgit v1.2.3