Implement proper signal handler
This commit is contained in:
@@ -41,6 +41,10 @@ func main() {
|
||||
log.Fatalf("Failed to create server: %v", err)
|
||||
}
|
||||
|
||||
// Setup signal handling for immediate shutdown.
|
||||
log.Infof("Installing signal handler")
|
||||
setupSignalHandler(server)
|
||||
|
||||
log.Infof("Starting backer version %s at %s", version, server.Addr)
|
||||
|
||||
if backer.C.NoHTTPS {
|
||||
@@ -60,6 +64,8 @@ func main() {
|
||||
log.Fatalf("Failed to start server: %v", err)
|
||||
}
|
||||
}
|
||||
|
||||
log.Infof("Server stopped")
|
||||
}
|
||||
|
||||
// defaultConfigPath returns the default config file path based on the OS.
|
||||
|
||||
29
cmd/backer/sigHandler.go
Normal file
29
cmd/backer/sigHandler.go
Normal file
@@ -0,0 +1,29 @@
|
||||
package main
|
||||
|
||||
import (
|
||||
"os"
|
||||
"os/signal"
|
||||
"syscall"
|
||||
|
||||
"backer/internal/backer"
|
||||
"backer/internal/log"
|
||||
)
|
||||
|
||||
// setupSignalHandler sets up signal handling for immediate shutdown.
|
||||
// SIGTERM is commonly sent by systemd, k8s, and other container orchestrators.
|
||||
// SIGINT is sent on Ctrl+C.
|
||||
func setupSignalHandler(server *backer.ServerWrapper) {
|
||||
signalCh := make(chan os.Signal, 1)
|
||||
signal.Notify(signalCh, os.Interrupt, syscall.SIGTERM)
|
||||
|
||||
go func() {
|
||||
<-signalCh
|
||||
log.Warnf("Shutdown signal received, shutting down immediately...")
|
||||
// Close the embedded http.Server directly.
|
||||
if closeErr := server.Close(); closeErr != nil {
|
||||
log.Errorf("Error during server shutdown: %v", closeErr)
|
||||
}
|
||||
}()
|
||||
}
|
||||
|
||||
/* vim: setlocal ft=go noet ai ts=4 sw=4 sts=4: */
|
||||
Reference in New Issue
Block a user