func handleSignals(app *libcentrifugo.Application) { sigc := make(chan os.Signal, 1) signal.Notify(sigc, syscall.SIGHUP, syscall.SIGINT, os.Interrupt) for { sig := <-sigc logger.INFO.Println("Signal received:", sig) switch sig { case syscall.SIGHUP: // reload application configuration on SIGHUP logger.INFO.Println("Reloading configuration") err := viper.ReadInConfig() if err != nil { switch err.(type) { case viper.ConfigParseError: logger.CRITICAL.Printf("Error parsing configuration: %s\n", err) continue default: logger.CRITICAL.Println("No config file found") continue } } setupLogging() c := newConfig() app.SetConfig(c) logger.INFO.Println("Configuration successfully reloaded") case syscall.SIGINT, os.Interrupt: logger.INFO.Println("Shutting down") go time.AfterFunc(10*time.Second, func() { os.Exit(1) }) app.Shutdown() os.Exit(130) } } }
func handleSignals(app *libcentrifugo.Application) { sigc := make(chan os.Signal, 1) signal.Notify(sigc, syscall.SIGHUP, syscall.SIGINT, os.Interrupt) for { sig := <-sigc logger.INFO.Println("signal received:", sig) switch sig { case syscall.SIGHUP: // reload application configuration on SIGHUP // note that you should run checkconfig before reloading configuration // as Viper exits when encounters parsing errors logger.INFO.Println("reloading configuration") err := viper.ReadInConfig() if err != nil { logger.CRITICAL.Println("unable to locate config file") return } setupLogging() c := newConfig() s := structureFromConfig(nil) app.SetConfig(c) app.SetStructure(s) case syscall.SIGINT, os.Interrupt: logger.INFO.Println("shutting down") go time.AfterFunc(5*time.Second, func() { os.Exit(1) }) app.Shutdown() os.Exit(130) } } }