当系统热重启时,服务不间断,系统内存中数据需要全部写入到数据库。
gracehttp包
func (srv *Server) handleSignals() {
var sig os.Signal
signal.Notify(
srv.signalChan,
syscall.SIGTERM,
syscall.SIGUSR2,
)
for {
sig =
switch sig {
case syscall.SIGTERM:
srv.logf("received SIGTERM, graceful shutting down HTTP server.")
srv.shutdownHTTPServer()
case syscall.SIGUSR2:
srv.logf("received SIGUSR2, graceful restarting HTTP server.")
if pid, err := srv.startNewProcess(); err != nil {
srv.logf("start new process failed: %v, continue serving.", err)
} else {
srv.logf("start new process successed, the new pid is %d.", pid)
srv.shutdownHTTPServer()
}
default:
}
}
}
监听Linux信号,收到重启信号后,等待任务全部处理完再退出进程(因为使用了第三方包,它也在监听信号,它会在没有http请求后终止服务,所以这个不可行)
共享内存。这样多个进程都可以读取数据。