diff --git a/cmd/clonepack/serve.go b/cmd/clonepack/serve.go index b299869..9846d56 100644 --- a/cmd/clonepack/serve.go +++ b/cmd/clonepack/serve.go @@ -6,6 +6,7 @@ import ( "log" "net/http" "os" + "time" "os/signal" "syscall" @@ -54,7 +55,20 @@ var serveCmd = &cobra.Command{ syncSvc.StartScheduler(ctx, cfg.Sync.IntervalDuration()) addr := fmt.Sprintf("%s:%d", cfg.Server.Host, cfg.Server.Port) - log.Printf("ClonePack listening on %s", addr) - return http.ListenAndServe(addr, router) + srv := &http.Server{Addr: addr, Handler: router} + + go func() { + log.Printf("ClonePack listening on %s", addr) + if err := srv.ListenAndServe(); err != nil && err != http.ErrServerClosed { + log.Printf("server error: %v", err) + } + }() + + <-ctx.Done() + log.Printf("shutting down...") + + shutdownCtx, cancel2 := context.WithTimeout(context.Background(), 30*time.Second) + defer cancel2() + return srv.Shutdown(shutdownCtx) }, }