當系統熱重啓時,服務不間斷,系統內存中數據須要所有寫入到數據庫。數據庫
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請求後終止服務,因此這個不可行)
共享內存。這樣多個進程均可以讀取數據。rest