2016-04-01 20 views
3

redis-cliからのSHUTDOWNを使用してredisサーバを終了しました。プロンプトに「接続されていません」と表示されます。redis-cliコマンドでredisサーバを再起動

サーバを再起動する唯一の方法は、redis-cliプロンプトを終了してから、redisサービスを再起動することでした。

私の質問は、redis-cliプロンプトを出さずにredisコマンドを使用してredis-cliプロンプトからサーバを再起動する方法はありますか?

答えて

1

cliを終了する必要はありませんが、シャットダウン後はサーバーを再起動できません。私はItamarハーバーの答えを同意し、私は、サーバーの再起動後に詳細

を明らかにします

+0

に感謝を接続して受け入れる、ソケットのイベントをリッスンします!したがって、サーバーを再起動する唯一の方法は、redis-cliを終了し、$ sudoサービスをredis-cli再起動することです。 –

+0

あなたはcliを終了する必要はありません - 単に別のシェルセッションを開くことができます。サーバが立ち上がったら、cliの 'not connected>'プロンプトに戻り、サーバに再接続するための有効なコマンドを入力します(例えば 'PING')。 –

+0

それは私に多くの研究時間を節約しました。明らかに何ももたらさなかったでしょう。既にたくさん検索していました!どうもありがとうございます! –

0

あなたはこの「>接続されていない」のいずれかのコマンドを入力した場合、Redisの-CLIはsendコマンドが失敗した場合は、再度接続を試みます。

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; 
      } 
     } 
    } 

のRedisサーバが正常に再起動した後、それはソケットが発生し接続した場合、サーバはここ

 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); 
    } 
}