shutdown - Simple go signals handler for performing graceful shutdown by executing callback function
Contributors:
Want to contribute ? Feel free to send pull requests!
Have problems, bugs, feature ideas? We are using the github issue tracker to manage them.
For examples visit godoc#pkg-examples
For GoDoc reference, visit pkg.go.dev
For detailed breakdown of example How to handle signals with Go to graceful shutdown HTTP server
package main import ( "context" "fmt" "log" "net" "net/http" "os" "syscall" "time" "github.com/vardius/shutdown" ) func main() { ctx, cancel := context.WithCancel(context.Background()) defer cancel() mux := http.NewServeMux() mux.HandleFunc("/", func(w http.ResponseWriter, req *http.Request) { fmt.Fprintf(w, "Hello!") }) httpServer := &http.Server{ Addr: ":8080", Handler: mux, BaseContext: func(_ net.Listener) context.Context { return ctx }, } stop := func() { gracefulCtx, cancel := context.WithTimeout(context.Background(), 5*time.Second) defer cancel() if err := httpServer.Shutdown(gracefulCtx); err != nil { log.Printf("shutdown error: %v\n", err) } else { log.Printf("gracefully stopped\n") } } // Run server go func() { if err := httpServer.ListenAndServe(); err != http.ErrServerClosed { log.Printf("HTTP server ListenAndServe: %v", err) os.Exit(1) } }() shutdown.GracefulStop(stop) // will block until shutdown signal is received }📜 License
This package is released under the MIT license. See the complete license in the package
