linux 信號

當系統熱重啓時,服務不間斷,系統內存中數據須要所有寫入到數據庫。數據庫

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

相關文章
相關標籤/搜索