redis-serverを停止するにはどうすればよいですか?


333

redis-server入力して新しいサーバーを起動しようとするredis-serverと、次のように迎えられるため、インスタンスが実行されているようです。

Opening port: bind: Address already in use

このサーバーを停止して新しいサーバーを起動する方法がわかりません。

redis-serverCLIで入力しているときに追加できるコマンドはありますか?

私のOSはUbuntu 10.04です。


どのOSとディストリビューションを使用していますか?
yojimbo87

ご列席の皆様、パッケージマネージャー経由でredisをインストールせず、ソースからインストールした場合、ubuntuのsystemv、upstart、systemdで動作しない可能性があります。したがって、選択した回答はデフォルトでは機能しません。正しいとマークされていない2番目の答えは、より信頼できるようです。
Donato

ヒント:Redisサーバーが実行されているかどうかのテストは、を使用して実行できますredis-cli ping。実行中のRedisサーバーはで応答しPONGます。
Jochem Schulenklopper

回答:


552

ノードインスタンスに接続してshutdownコマンドを使用するか、ubuntuを使用している場合は、init.dを使用してredisサーバーを再起動してみます。

/etc/init.d/redis-server restart

または停止/開始:

/etc/init.d/redis-server stop
/etc/init.d/redis-server start

Mac

redis-cli shutdown

5
redisをそのように設定した場合にのみ、これを行うことができます。Kevin McTigueの回答は、最小限の設定で機能します。
BTK

1
OS X上では、おそらく使用する必要がありますlaunchctlこれを行うには、他のシステム上、systemctlまたはservice
tadman 2013

1
一部のマシンではsudo /etc/init.d/redis stopが機能します
TroodoN-Mike 14

4
現代のUbuntuでは、私は使用service redis-server stopしてservice redis-server startでそれをインストールした後、apt-get install redis-server
クラウド職人、2015年

1
これは、redis-serverをサービスとして実行している場合にのみ機能します。スタンドアロンの実行可能ファイルとして実行されている場合は、プロセスを明示的に停止する必要があります。プロセスを停止するために使用した手順は次の

199

よりクリーンで信頼性の高い方法は、redis-cliに移動してから入力することです shutdown

redis-cliで次のように入力するhelp @serverと、リストの下部にこれが表示されます。

SHUTDOWN-要約:データセットを同期的にディスクに保存してからサーバーをシャットダウン:0.07

ターミナルで実行されているredis-serverインスタンスがある場合は、次のように表示されます。

User requested shutdown...
[6716] 02 Aug 15:48:44 * Saving the final RDB snapshot before exiting.
[6716] 02 Aug 15:48:44 * DB saved on disk
[6716] 02 Aug 15:48:44 # Redis is now ready to exit, bye bye...

73
または、redis-cliを起動しないでください。コマンドラインからを介して送信するだけredis-cli shutdownです。(たとえば、このようなコマンドを送信できますredis-cli set cat dog; redis-cli get cat
JesseBuesking 2013

6
@jessebueskingコメントの唯一の注意点は、パスワード保護を設定している場合、にredis-cli set cat dog; redis-cli get cat変更するredis-cli -a mypassword set cat dog; redis-cli -a mypassword get catことです。これは、いくつかのコマンドの後に煩わしい場合があります。
2013

@glarrain冗長性を回避するためにできることの1つは、たとえば、現在のbashセッションのエイリアスを設定することですalias redis-cli="redis-cli -a mypassword"。この方法では、使用するたびにパスワードを再入力する必要なく、元のコメントのように電話をかけることができます。
JesseBuesking 2013年

@jessebueskingとてもクリエイティブです!解決策について考えていなかったでしょう。なんらかの理由で、構成ファイルにパスワードを入力するのが少し怖い
glarrain

@glarrainは私の言葉を受け入れませんが、これを行うと現在のセッションのメモリにのみ保存されると思います(別名bashrcまたはbash_profileに追加せず、プロンプトからそのまま入力してください)。
JesseBuesking 2013年

141

redis-cli shutdown最も効果的です。受け入れられた回答は私(OSX Lion)では機能しません。ありがとう、@ JesseBuesking。


Redisのが示されている方法でサービスとして設定してうん、受け入れられた答えは、Linuxシステムでのみ動作します
glarrain

2
これはWindowsでも機能します。redis-cli.exe shutdown
ブランドンブーン2014年

上で述べたように、この(かなり明白な)メソッドを見つけるのが非常に難しいのは残念です。私はそれredis-cli --helpがこの事件をカバーすることができたであろうと思った。
Jochem Schulenklopper

41

OSXの場合、起動と停止のために次のエイリアスを作成しましたredis(Homebrewと共にインストールされます)。

alias redstart='redis-server /usr/local/etc/redis/6379.conf'
alias redstop='redis-cli -h 127.0.0.1 -p 6379 shutdown'

これは、地域の開発に最適です。

Homebrewはhomebrew-services、サービスの開始、停止、再起動に使用できるようになりました。自作サービス

brew services 実行時に自動的にインストールされます。

brew services start|run redis 
brew services stop redis
brew services restart redis

を使用runすると、ログイン時に(起動時にも)起動しません。サービスstartを開始し、redisログインおよびブート時に追加します。


3
homebrewを使用してredisをインストールした場合brew services stop redisも動作します!:)
エドゥアールベルト

デフォルトの開始と停止を処理するために、今はbrewサービスを使用することをお勧めします。もう少し制御が必要な場合は、他のオプションもあります。
レイハンター

1
これは、apt、yum、brew、またはダウンロードを使用してインストールされたものを含め、すべてのLinuxフレーバーおよびMacで動作するため、最良の答えです。upstart、init、またはsystem dスクリプトがあるかどうか。ありがとう
doest_matter

1
私はエイリアスの名前が好きです:)かっこいい!
thinklinux '17年

1
シャットダウンせずに再起動したい場合はどうすればよいですか@RayHunter
AATHITH RAJENDRAN

25

SHUTDOWNCLIを入力します

または

メモリ内のデータを気にしない場合は、タイプSHUTDOWN NOSAVEしてサーバーを強制的にシャットダウンすることもできます。


16

お試しくださいkillall redis-server。を使用ps auxしてサーバーの名前とpidを検索し、でそれをkill することもできますkill -9 here_pid_number


これは素晴らしいです。mac/ unixで動作します。(Macテスト済み、UNIX承認済み)
ThomasReggi

24
DBサーバーを強制終了するのは悪い考えです。常に適切なシャットダウンを優先するか、少なくともkill -9ではなくkill -15を優先してください。
Zsolt Szilagyi 2013年

2
@ZsoltSzilagyリンクまたは悪い説明である理由の説明を提供する必要があります。redisが遅延書き込みを行う方法と同様に、コミットされていないデータがメモリに残ります。
notbad.jpeg

5
もちろん、@ notbad.jpeg、コンピュータを床に落としてもかまいません。テーブルが十分に高い場合は、サーバーも停止するはずです。なぜこれが悪い考えなのかについてのリンクや説明が必要ですか?
osa

2
この方法では、redisデータベースの状態については考えていません。アプリケーション自体またはデーモン(おそらくアプリケーション機能も使用している)を使用する代わりに、OS機能を使用してアプリケーションをシャットダウンしています。このソリューションは、ケーブルを外してテレビをシャットダウンするようなものです。
イエス

15

オプション1:redisインストールディレクトリに移動しsrc、私の場合はに移動します。

/opt/redis3/src/redis-cli -p 6379 shutdown

6379はデフォルトのポートです。

オプション2:redisプロセスを見つけて強制終了する

ps aux | grep redis-server

t6b3fg   22292  0.0  0.0 106360  1588 pts/0    S+   01:19   0:00 /bin/sh /sbin/service redis start
t6b3fg   22299  0.0  0.0  11340  1200 pts/0    S+   01:19   0:00 /bin/sh /etc/init.d/redis start

そして、殺害を開始します:

kill -9 22292

kill -9 22299

Centos 6.7、x86_64を使用しています

それが役に立てば幸い


12

rootユーザーでターミナルのredisサーバータイプを停止します

sudo service redis-server stop

メッセージはredis-serverを停止した後に表示されます

Stopping redis-server: redis-server.

redis-serverタイプを開始する場合

sudo service redis-server start

サーバーの種類を再起動する場合

sudo service redis-server restart

デフォルトで設定されている場合、これは新しいRedisバージョンでも引き続き有効かどうか疑問に思います。発行してservice --status-allもredisは表示されないため、serviceコマンドは失敗しredis-serverます。しかし、redisはに表示されps -efます。関連するドキュメントが見つかりません。
テーマフィールド

Ubuntu 18.04での見た目sudo service redis start/stop/statusは同じですが、どちらでもかまいません。
frmbelz

10

別の方法があります:

ps -ef | grep -i 'redis-server'
kill -9 PID owned by redis

* NIXおよびOSXで動作します


1
@JoenasE、いいえ、これは受け入れられた回答IMOであってはなりません。OSに実行中のプロセスを強制終了させると、アプリケーションの一部のデータがより永続的なストアにまだ保存されていない場合があります。アプリケーション提供する方法でアプリケーションシャットダウンすることは、より適切なオプションです。
Jochem Schulenklopper

6

MacOSX-それは働いた:)

ステップ1:以前実行中のRedisサーバーを見つける

ps auxx | grep redis-server

ステップ2:PID(プロセスID)を検索して特定のプロセスを終了する-Redis Sever

kill -9 PID

5

実行するポートがわかっている場合(デフォルトでは6379)、以下のコマンドを使用して、そのポートを使用するプロセスのpidを取得し、同じpidに対してkillコマンドを実行できます。

sudo lsof -i : <port> | awk '{print $2}'

上記のコマンドはあなたにpidを与えます。

殺します<pid>;

これによりサーバーがシャットダウンします。


5

systemd、ubuntu 16.04:

$ sudo systemctl is-active redis-server
active

$ sudo systemctl is-enabled redis-server
enabled

$ sudo systemctl disable redis-server
Synchronizing state of redis-server.service with SysV service script with /lib/systemd/systemd-sysv-install.
Executing: /lib/systemd/systemd-sysv-install disable redis-server
Removed /etc/systemd/system/redis.service.

$ sudo systemctl stop redis-server

5

通常、この問題は、コンピューターをシャットダウンした(または実行したままにした)後、不規則な方法で発生します。プロセスは停止しますが、前のポートにバインドされたまま、ポートが開いたままになると思います。

9/10回の修正は次のようになります。

$ ps aux | grep redis

-> MyUser 2976  0.0  0.0  2459704    320   ??  S    Wed01PM   0:29.94 redis-server *:6379

$ kill 2976

$ redis-server

行ってもいい。


3

私の場合、それは:

/etc/init.d/redismaster stop
/etc/init.d/redismaster start

サービス名を調べるには、次のコマンドを実行します。

sudo updatedb
locate redis

また、システム内のすべてのRedisファイルが表示されます。


3

あなたはなかったかmake installをインストールしている間(例えばUbuntuの)Redisのを、あなたが行うことができます。

redis-cli shutdown

@ yojimbo87によって指摘されたように :)


2

別の方法があります:

brew services stop redis

+10このため、Macでは謝罪なしで動作します!これも機能します™brew services start redis™¢brew services restart redis¢
Victor.Uduak


2

Dockerコンテナーでredisを実行している場合、現在の回答はどれも役に立ちません。redisコンテナーを停止する必要があります。それ以外の場合、redisプロセスはリスポーンし続けます。

$ docker ps
CONTAINER ID        IMAGE                    PORTS                             
e1c008ab04a2        bitnami/redis:4.0.8-r0   0.0.0.0:6379->6379/tcp

$ docker stop e1c008ab04a2
e1c008ab04a2

2

Redisサーバーが実行されているポート(デフォルト:6379)がわかっている場合は、オプション1を使用するか、Redisプロセスを確認してオプション2を使用して強制終了できます。

オプション1:
ポートのプロセスを強制終了:

check     : sudo lsof -t -i:6379
kill      : sudo kill `sudo lsof -t -i:6379`

オプション2:
以前に実行中のRedisサーバーを見つける:

 ps auxx | grep redis-server

PID(プロセスID)を検索して特定のプロセスを強制終了-Redis Sever

kill -9 PID

次に、redisサーバーを起動します

redis-server /path/to/redis.conf 

1

特にredisについてはわかりませんが、サーバー全般については:

どのOSまたはディストリビューション?多くの場合、pidファイルで既存のpidを検索できるstopまたは/etc/init.d / ...コマンドがあります。

どのプロセスがすでにポートにバインドされているかを調べsudo netstat -nlpt(Linuxオプション。他のnetstatフレーバーは異なる場合があります)、停止するように通知できます。私は考えていない使用kill -9実際には他の信号またはそれをシャットダウンする方法がない場合を除き実行しているサーバー上で。


1

以下のコマンドは、Ubuntu Server動作します

$ service /etc/init.d/redis_6379 stop
$ service /etc/init.d/redis_6379 start
$ service /etc/init.d/redis_6379 restart

0

MacOSXでは、

これは私のために働いたものです

/etc/init.d/redis restart

/etc/init.d/redis stop

/etc/init.d/redis start

0

redisコマンドが機能していないかどうかを確認する1つのことは、実際にredis-server.pidが作成されているかどうかです。このファイルがある場所を指定します

/etc/systemd/system/redis.service 

そして、次のようなセクションがあるはずです。

[Service]
Type=forking
User=redis
Group=redis
ExecStart=/usr/bin/redis-server /etc/redis/redis.conf
PIDFile=/run/redis/redis-server.pid
TimeoutStopSec=0
Restart=always

PIDFileディレクトリの場所と権限を確認します(私の場合は/ run / redis)。デプロイとしてログインしたサービスを再起動しようとしましたが、ディレクトリの権限が

drwxrwsr-x  2 redis    redis      40 Jul 20 17:37 redis

Linuxの権限について復習が必要な場合は、こちらをご覧ください。しかし問題は、上記のアクセス許可がrxであるデプロイユーザーとして再起動を実行していたため、ユーザーがPIDFileディレクトリに書き込むことができないことでした。

それがわかったら、ルートを使用してログインし、redis(service redis restart)で再起動コマンドを再実行すると、すべてが機能しました。それは頭痛の種でしたが、うまくいけば、これにより誰かが少し時間を節約できます。


0

Redisには構成パラメーターがありますpidfile(例:/etc/redis.conf-redisのソースコードを確認してください)。次に例を示します。

# If a pid file is specified, Redis writes it where specified at startup
# and removes it at exit.
#
# When the server runs non daemonized, no pid file is created if none is
# specified in the configuration. When the server is daemonized, the pid file
# is used even if not specified, defaulting to "/var/run/redis.pid".
#
pidfile /var/run/redis.pid

設定されているか、設定できる場合は、ps + grep次のようなものを使用してプロセスID(pid)を検索する代わりに、次の方法を使用できます。

kill $(cat /var/run/redis.pid)

必要に応じて、次のようなredis停止スクリプトを作成できますデフォルトのredis 5.0 init.dスクリプトをredisソースコードに適用))。

PIDFILE=/var/run/redis.pid
if [ ! -f $PIDFILE ]
then
    echo "$PIDFILE does not exist, process is not running"
else
    PID=$(cat $PIDFILE)
    echo "Stopping ..."
    kill $PID
    while [ -x /proc/${PID} ]
    do
        echo "Waiting for Redis to shutdown ..."
        sleep 1
    done
    echo "Redis stopped"
fi
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.