From 87af4fcd93c4d591f862544d3800fa8093759fa5 Mon Sep 17 00:00:00 2001 From: Viktor Patchev Date: Fri, 7 Jan 2022 20:41:50 +0100 Subject: [PATCH] Server graceful shutdown --- main.go | 22 +++++++++++++++++++++- 1 file changed, 21 insertions(+), 1 deletion(-) diff --git a/main.go b/main.go index 2968ae7..15ec433 100644 --- a/main.go +++ b/main.go @@ -1,7 +1,11 @@ package main import ( + "context" + "net/http" "os" + "os/signal" + "time" "github.com/bumi/lndhub.go/database" "github.com/bumi/lndhub.go/lib" @@ -33,5 +37,21 @@ func main() { routes.Routes(e.Group("")) - e.Logger.Fatal(e.Start(":3000")) + // Start server + go func() { + if err := e.Start(":3000"); err != nil && err != http.ErrServerClosed { + e.Logger.Fatal("shutting down the server") + } + }() + + // Wait for interrupt signal to gracefully shutdown the server with a timeout of 10 seconds. + // Use a buffered channel to avoid missing signals as recommended for signal.Notify + quit := make(chan os.Signal, 1) + signal.Notify(quit, os.Interrupt) + <-quit + ctx, cancel := context.WithTimeout(context.Background(), 10*time.Second) + defer cancel() + if err := e.Shutdown(ctx); err != nil { + e.Logger.Fatal(err) + } }