当系统热重启时,服务不间断,系统内存中数据需要全部写入到数据库。
gracehttp
包
func (srv *Server) handleSignals() {
var sig os.Signal
signal.Notify(
srv.signalChan,
syscall.SIGTERM,
syscall.SIGUSR2,
)
for {
sig = <-srv.signalChan
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请求后终止服务,所以这个不可行)
共享内存。这样多个进程都可以读取数据。
**粗体** _斜体_ [链接](http://example.com) `代码` - 列表 > 引用
。你还可以使用@
来通知其他用户。