Spaces:
Sleeping
Sleeping
package utils | |
import ( | |
"io" | |
"os" | |
"os/signal" | |
"syscall" | |
"github.com/rs/zerolog/log" | |
) | |
func WaitUntilSignal(closers ...io.Closer) { | |
c := make(chan os.Signal, 1) | |
signal.Notify(c, os.Interrupt, syscall.SIGTERM) | |
sig := <-c | |
log.Info(). | |
Str("signal", sig.String()). | |
Msg("Received signal, exiting") | |
code := 0 | |
for _, closer := range closers { | |
if err := closer.Close(); err != nil { | |
log.Error(). | |
Err(err). | |
Msg("Failed when shutting down server") | |
os.Exit(1) | |
} | |
} | |
if code == 0 { | |
log.Info().Msg("Shutdown Completed") | |
} | |
os.Exit(code) | |
} | |