我正在尝试在我的一个服务器中添加优雅关闭。我知道代码是工作的。我希望在重新部署服务器后,首先优雅关闭工作,然后服务器将重新启动。但它没有发生。你们能告诉我可能的原因吗?
done := make(chan bool, 1)
quit := make(chan os.Signal, 1)
signal.Notify(quit, os.Interrupt, syscall.SIGINT, syscall.SIGTERM)
signal.Notify(quit, syscall.SIGHUP, syscall.SIGQUIT)
signal.Notify(quit, syscall.SIGILL, syscall.SIGTRAP)
signal.Notify(quit, syscall.SIGABRT, syscall.SIGBUS, syscall.SIGFPE)
go func() {
BootUpLog("before <-quit")
syscall.Kill(syscall.Getpid(), syscall.SIGTERM)
<-quit
BootUpLog("shutting down")
ctx, cancel := context.WithTimeout(context.Background(), 5*time.Second)
defer cancel()
server.SetKeepAlivesEnabled(false)
if err := server.Shutdown(ctx); err != nil {
BootUpLog(fmt.Sprintf("Error in graceful shutdown of the server: %v", err))
}
close(done)
}()
if err := server.ListenAndServe(); err != nil && err != http.ErrServerClosed {
BootUpLog(fmt.Sprintf("shut down with error: %v", err))
}
<-done
BootUpLog("Shutdown gracefully.")
}
这里的日志“before〈-quit”正在打印,而在redeploymet之后,它在〈-quit通道中没有接收到任何信号。
1条答案
按热度按时间wj8zmpe11#
您的
BootUpLog()
实现是否存在问题?以下代码对我有效(main.go
):运行它: