2016-04-01 69 views
3

我使用redis-cli中的SHUTDOWN終止了redis服務器。現在提示顯示'not connected>'。Redis-cli命令重新啓動redis服務器

我發現重新啓動服務器的唯一方法是退出redis-cli提示符,然後重新啓動redis服務。

我的問題是,有沒有辦法使用任何redis命令從redis-cli提示符下重新啓動服務器,而無需退出redis-cli提示符?

回答

1

雖然您不必退出cli,但服務器關閉後無法從服務器重新啓動。

+0

謝謝!所以重啓服務器的唯一方法是退出redis-cli並執行$ sudo服務redis-cli restart? –

+0

您不必退出cli - 只需打開另一個shell會話即可。一旦服務器啓動,返回到cli的'not connected>'提示符下,輸入任何有效的命令重新連接到服務器(例如'PING')。 –

+0

這爲我節省了大量的研究時間,這顯然不會導致任何結果。已經搜索了很多!非常感謝! –

0

我同意伊塔馬爾哈伯答案,並在服務器重新啓動後,我會發現細節

,如果你在這個「未連接>」輸入任何命令,Redis的-CLI將嘗試連接,如果再發送命令失敗。

while (1) { 
     config.cluster_reissue_command = 0; 
     if (cliSendCommand(argc,argv,repeat) != REDIS_OK) { 
      cliConnect(1);//try to connect redis server if sendcommand failed 

      if (cliSendCommand(argc,argv,repeat) != REDIS_OK) {//after try to connect,send commend again 
       cliPrintContextError(); 
       return REDIS_ERR; 
      } 
     } 
    } 

成功的Red​​is服務器重新啓動後,它會監聽套接字事件,如果套接字連接發生時,服務器將接受連接在這裏

 void acceptTcpHandler(aeEventLoop *el, int fd, void *privdata, int mask) { 
       ......some code....... 
    while(max--) { 
     cfd = anetTcpAccept(server.neterr, fd, cip, sizeof(cip), &cport);//accept connect 
     if (cfd == ANET_ERR) { 
      if (errno != EWOULDBLOCK) 
       serverLog(LL_WARNING, 
        "Accepting client connection: %s", server.neterr); 
      return; 
     } 
     serverLog(LL_VERBOSE,"Accepted %s:%d", cip, cport); 
     acceptCommonHandler(cfd,0,cip); 
    } 
}