shlamp 2019-06-29
当系统热重启时,服务不间断,系统内存中数据需要全部写入到数据库。
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请求后终止服务,所以这个不可行)
共享内存。这样多个进程都可以读取数据。