diff --git a/internal/service/service.go b/internal/service/service.go index 0871c4c..f101c93 100644 --- a/internal/service/service.go +++ b/internal/service/service.go @@ -57,19 +57,33 @@ func RunService() { } }() + // Separate Channel for handling SIGHUP + hupCh := make(chan os.Signal, 1) + signal.Notify(hupCh, syscall.SIGHUP) + ctx, stop := signal.NotifyContext(context.Background(), syscall.SIGINT, syscall.SIGTERM) defer stop() <- ctx.Done() - log.Println("Sending stop signal to Server Process") - if _, err := stdin.Write([]byte("stop\n")); err != nil { - log.Printf("write error: %v", err) - } - //stdin.Close() - - if err := cmd.Wait(); err != nil { - log.Printf("child exit: %v", err) + for { + select { + case <-hupCh: + log.Println("Sending reload signal to Server Process") + if _, err := stdin.Write([]byte("reload\n")); err != nil { + log.Printf("write error: %v", err) + } + case <-ctx.Done(): + log.Println("Sending stop signal to Server Process") + if _, err := stdin.Write([]byte("stop\n")); err != nil { + log.Printf("write error: %v", err) + } + if err := cmd.Wait(); err != nil { + log.Printf("child exit: %v", err) + } + log.Println("Shutdown completed") + return + } } - log.Println("Shutdown completed") + }