Wie kann ich den Redis-Server stoppen?

333

Anscheinend wird eine redis-serverInstanz ausgeführt, da ich beim Versuch, einen neuen Server durch Eingabe zu starten redis-server, Folgendes begrüßt werde:

Opening port: bind: Address already in use

Ich kann nicht herausfinden, wie ich diesen Server stoppen und einen neuen starten kann.

Gibt es einen Befehl, an den ich anhängen kann, redis-serverwenn ich die CLI eingebe?

Mein Betriebssystem ist Ubuntu 10.04.

Qcom
quelle
Welches Betriebssystem und welche Distribution verwenden Sie?
Yojimbo87
Meine Damen und Herren, wenn Sie redis nicht über den Paketmanager installiert und von der Quelle installiert haben, funktioniert es möglicherweise nicht mit systemv oder upstart oder systemd unter Ubuntu. Daher funktioniert die ausgewählte Antwort standardmäßig nicht. Die zweite Antwort, die nicht als richtig markiert ist, scheint zuverlässiger zu sein.
Donato
Tipp: Das Testen, ob ein Redis-Server ausgeführt wird, kann über erfolgen redis-cli ping. Ein laufender Redis-Server antwortet mit PONG.
Jochem Schulenklopper

Antworten:

552

Stellen Sie entweder eine Verbindung zur Knoteninstanz her und verwenden Sie den Befehl shutdown. Wenn Sie Ubuntu verwenden, können Sie versuchen, den Redis-Server über init.d neu zu starten:

/etc/init.d/redis-server restart

oder stoppen / starten:

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

Auf dem Mac

redis-cli shutdown
yojimbo87
quelle
5
Sie können dies nur tun, wenn Sie Redis auf diese Weise einrichten. Die Antwort von Kevin McTigue funktioniert mit minimalem Setup.
BTK
1
Unter OS X müssen Sie dies wahrscheinlich verwenden launchctl, und auf anderen Systemen systemctloder service.
Tadman
1
Auf einigen Maschinen funktioniert sudo /etc/init.d/redis stop
TroodoN-Mike
4
Auf modernem Ubuntu benutze ich einfach service redis-server stopund service redis-server start, nachdem ich es mit installiert habe apt-get install redis-server.
Cloud Artisans
1
Dies funktioniert nur, wenn der Redis-Server als Dienst ausgeführt wird. Wenn es als eigenständige ausführbare Datei ausgeführt wird, müssen Sie den Prozess explizit stoppen. Hier sind die Schritte, die ich verwendet habe, um den Prozess zu stoppen: pkill redis-server auf einer Linux-Box
199

Ein sauberer und zuverlässigerer Weg ist es, in redis-cli zu gehen und dann zu tippen shutdown

Geben help @serverSie in redis-cli Folgendes ein und Sie sehen dies am Ende der Liste:

SHUTDOWN - Zusammenfassung: Speichern Sie das Dataset synchron auf der Festplatte und fahren Sie den Server seit: 0.07 herunter

Wenn in einem Terminal eine Redis-Server-Instanz ausgeführt wird, wird Folgendes angezeigt:

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...
Kevin McTigue
quelle
73
Oder starten Sie nicht einmal redis-cli. Senden Sie es einfach über die Befehlszeile über redis-cli shutdown. (Sie können zum Beispiel einen redis-cli set cat dog; redis-cli get cat
solchen
6
Die einzige Einschränkung für den Kommentar von @jessebuesking besteht darin, dass beim Einrichten des Kennwortschutzes redis-cli set cat dog; redis-cli get catÄnderungen an vorgenommen werden redis-cli -a mypassword set cat dog; redis-cli -a mypassword get cat, was nach einigen Befehlen ärgerlich sein kann.
Glarrain
@glarrain Eine Möglichkeit, die Redundanz zu vermeiden, besteht darin, beispielsweise einen Alias ​​für Ihre aktuelle Bash-Sitzung festzulegen alias redis-cli="redis-cli -a mypassword". Auf diese Weise können Sie die Anrufe wie in meinem ursprünglichen Kommentar tätigen, ohne Ihr Passwort bei jeder Verwendung erneut eingeben zu müssen.
JesseBuesking
@ Jessebuesking sehr kreativ! Hätte nicht über eine Lösung nachgedacht. Aus irgendeinem Grund habe ich ein wenig Angst, Passwörter in Konfigurationsdateien zu setzen
glarrain
@glarrain nimm mein Wort nicht dafür, aber ich denke , dies speichert es nur für die aktuelle Sitzung im Speicher (auch bekannt als füge es nicht zu deinem bashrc oder bash_profile hinzu, gib es einfach so wie es ist von deiner Eingabeaufforderung aus ein).
JesseBuesking
141

redis-cli shutdownist am effektivsten. Die akzeptierte Antwort funktioniert bei mir nicht (OSX Lion). Danke, @JesseBuesking.

Einfach
quelle
Ja, die akzeptierte Antwort funktioniert nur für Linux-Systeme, bei denen Redis wie abgebildet als Dienst eingerichtet wurde
glarrain
2
Dies funktioniert auch unter Windows. redis-cli.exe shutdown
Brandon Boone
Wie ich oben erwähnt habe, ist es schade, dass diese (ziemlich offensichtliche) Methode so schwer zu finden ist. Ich hatte erwartet, dass redis-cli --helpdies diesen Fall hätte abdecken können.
Jochem Schulenklopper
41

Für OSX habe ich die folgenden Aliase zum Starten und Stoppen erstellt redis(installiert mit Homebrew):

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

Dies hat sich hervorragend für die lokale Entwicklung bewährt!

Homebrew hat jetzt homebrew-servicesdie Möglichkeit, Dienste zu starten, zu stoppen und neu zu starten. Homebrew-Dienste

brew services wird beim Ausführen automatisch installiert.

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

Wenn Sie verwenden run, wird es beim Anmelden (oder Booten) nicht gestartet. startstartet den redisDienst und fügt ihn beim Anmelden und Booten hinzu.

Ray Hunter
quelle
3
Wenn Sie Redis mit Homebrew installiert haben, brew services stop redisfunktioniert das auch! :)
Edouard Berthe
Ich würde mit empfehlen Gebräu Dienstleistungen für den Umgang mit dem Start jetzt und für die Standardwerte zu stoppen. Wenn Sie etwas mehr Kontrolle benötigen, gibt es auch andere Optionen.
Ray Hunter
1
Dies ist die beste Antwort, da es auf allen Linux-Varianten und Macs funktioniert, einschließlich derer, die mit apt, yum, Brew oder Download installiert wurden. Ob sie Upstart- oder Init- oder System-D-Skripte haben oder nicht. Danke
nicht_Mater
1
Ich mag den Namen der Aliase :) Cool!
thinklinux
1
Was soll ich tun, wenn ich neu starten und nicht herunterfahren möchte
? @RayHunter
25

Geben Sie SHUTDOWNdie CLI ein

oder

Wenn Sie sich nicht um Ihre Daten im Speicher kümmern, können Sie auch eingeben SHUTDOWN NOSAVE, um das Herunterfahren des Servers zu erzwingen.

user1651082
quelle
16

Versuchen Sie es killall redis-server. Sie können auch verwenden ps aux, um den Namen und die PID Ihres Servers zu finden und ihn dann mit zu beenden kill -9 here_pid_number.

ciembor
quelle
Das ist toll, funktioniert unter Mac / Unix. (Mac getestet, Unix genehmigt)
ThomasReggi
24
Schlechte Idee, einen DB-Server hart zu töten. Bevorzugen Sie immer ein ordnungsgemäßes Herunterfahren oder töten Sie zumindest -15 anstelle von -9.
Zsolt Szilagyi
2
@ZsoltSzilagy Sie sollten einen Link oder eine Erklärung angeben, warum es eine schlechte Idee ist. Zum Beispiel, wie Redis verzögerte Schreibvorgänge ausführt, damit sich immer noch nicht festgeschriebene Daten im Speicher befinden.
notbad.jpeg
5
@ notbad.jpeg, natürlich können Sie Ihren Computer auch auf den Boden fallen lassen. Wenn die Tabelle hoch genug ist, sollte dies auch den Server stoppen. Benötige ich einen Link oder eine Erklärung, warum dies eine schlechte Idee ist?
osa
2
Bei dieser Methode denken Sie nicht an den Status der Redis-Datenbank. Sie verwenden eine Betriebssystemfunktionalität, um eine Anwendung herunterzufahren, anstatt die Anwendung selbst oder einen Dämon zu verwenden, der wahrscheinlich auch die Anwendungsfunktionalität verwendet. Diese Lösung ist wie das Abziehen des Kabels zum Herunterfahren des Fernsehgeräts.
Jesus
15

Option 1: Gehen Sie zum Redis-Installationsverzeichnis und navigieren Sie srcin meinem Fall zu:

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

Dabei ist 6379 der Standardport.

Option 2: Redis-Prozess finden und töten

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

Und dann töte:

kill -9 22292

kill -9 22299

Ich verwende Centos 6.7, x86_64

ich hoffe es hilft

App Arbeit
quelle
12

Stoppen Sie den Redis-Servertyp im Terminal mit dem Root-Benutzer

sudo service redis-server stop

Die Meldung wird nach dem Stoppen des Redis-Servers angezeigt

Stopping redis-server: redis-server.

Wenn Sie den Redis-Server-Typ starten möchten

sudo service redis-server start

Wenn Sie den Servertyp neu starten möchten

sudo service redis-server restart
denny
quelle
Ich frage mich, ob dies für neue Redis-Versionen noch gültig ist, wenn diese standardmäßig konfiguriert sind. Bei der Ausgabe service --status-allwerden keine Redis angezeigt, daher schlägt jeder serviceBefehl fehl redis-server. Aber Redis zeigt sich in ps -ef. Ich kann einfach kein verwandtes Dokument finden.
Themenfeld
Sieht auf Ubuntu 18.04 sudo service redis start/stop/statusgenauso aus, beide gehen.
Frmbelz
10

Ein anderer Weg könnte sein:

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

Funktioniert unter * NIX & OSX

smace
quelle
1
@JoenasE, nein, dies sollte nicht die akzeptierte Antwort IMO sein. Wenn das Betriebssystem einen laufenden Prozess beendet, wird der Fall vernachlässigt, dass die Anwendung möglicherweise Daten im Speicher hat, die noch nicht in einem dauerhafteren Speicher gespeichert wurden. Das Herunterfahren der Anwendung über eine von der Anwendung bereitgestellte Methode ist vorzugsweise eine bessere Option.
Jochem Schulenklopper
6

MacOSX - Es hat funktioniert :)

Schritt 1: Suchen Sie den zuvor ausgeführten Redis Server

ps auxx | grep redis-server

Schritt 2: Beenden Sie den spezifischen Prozess, indem Sie die PID (Prozess-ID) ermitteln - Redis Sever

kill -9 PID
Karthekeyan Devanand
quelle
5

Wenn Sie wissen, auf welchem ​​Port es ausgeführt wird (standardmäßig 6379), können Sie den folgenden Befehl verwenden, um die PID des Prozesses über diesen Port abzurufen, und dann den Befehl kill für dieselbe PID ausführen.

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

Der obige Befehl gibt Ihnen pid.

töten <pid>;

Dies würde Ihren Server herunterfahren.

cptjack
quelle
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
Adobe
quelle
5

Normalerweise tritt dieses Problem auf, nachdem ich meinen Computer auf unregelmäßige Weise heruntergefahren habe (oder laufen lasse). Ich glaube, der Port bleibt offen, während der Prozess stoppt, aber weiterhin an den vorherigen Port gebunden ist.

9/10 mal kann das Update sein:

$ ps aux | grep redis

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

$ kill 2976

$ redis-server

Gut zu gehen.

SerKnight
quelle
3

In meinem Fall war es:

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

Um herauszufinden, wie Ihr Dienstname lautet, können Sie Folgendes ausführen:

sudo updatedb
locate redis

Und es zeigt Ihnen alle Redis-Dateien in Ihrem System.

joan16v
quelle
3

Wenn Sie während der Installation von redis eine Installation (z. B. Ubuntu) durchgeführt haben, können Sie Folgendes tun:

redis-cli shutdown

wie von @ yojimbo87 gezeigt :)

gia huy
quelle
2

Ein anderer Weg könnte sein:

brew services stop redis
Ihor Pavlyk
quelle
+10 dafür funktioniert es ohne Entschuldigung auf dem Mac! Dies funktioniert auch ™ Brew Services starten Redis ™ ¢
Brew
2

Das Folgende hat für mich auf MAC funktioniert

 ps aux | grep 'redis-server' | awk '{print $2}' | xargs sudo kill -9
Mahesh Hegde
quelle
2

Wenn Sie Redis in einem Docker-Container ausführen, hilft keine der vorliegenden Antworten. Sie müssen den Redis-Container stoppen. Andernfalls wird der Redis-Prozess immer wieder neu gestartet.

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

$ docker stop e1c008ab04a2
e1c008ab04a2
Wladek Surala
quelle
2

Wenn Sie wissen, an welchem ​​Port (Standard: 6379) Ihr Redis-Server ausgeführt wird, können Sie Option 1 wählen oder Ihren Redis-Prozess überprüfen und mit Option 2 beenden

Option 1:
Prozess am Port beenden:

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

Option 2:
Suchen Sie den zuvor ausgeführten Redis-Server:

 ps auxx | grep redis-server

Beenden Sie den spezifischen Prozess, indem Sie PID (Process ID) - Redis Sever finden

kill -9 PID

Starten Sie nun Ihren Redis-Server mit

redis-server /path/to/redis.conf 
AATHITH RAJENDRAN
quelle
1

Ich weiß nicht speziell für Redis, aber für Server im Allgemeinen:

Welches Betriebssystem oder welche Distribution? Oft gibt es einen Befehl stop oder /etc/init.d / ..., mit dem die vorhandene PID in einer PID-Datei nachgeschlagen werden kann.

Sie können nachschlagen, welcher Prozess bereits an den Port gebunden ist sudo netstat -nlpt(Linux-Optionen; andere Netstat-Varianten variieren) und signalisieren, dass er gestoppt werden soll. Ich würde nicht verwenden kill -9auf einem laufenden Server , es sei denn es gibt wirklich kein anderes Signal oder Verfahren ist es herunterzufahren.

ysth
quelle
1

Die folgenden Befehle funktionieren für mich unter Ubuntu Server

$ service /etc/init.d/redis_6379 stop
$ service /etc/init.d/redis_6379 start
$ service /etc/init.d/redis_6379 restart
efkan
quelle
0

Unter MacOSX

Das hat bei mir funktioniert

/etc/init.d/redis restart

/etc/init.d/redis stop

/etc/init.d/redis start
tsuz
quelle
0

Eine Sache, um zu überprüfen, ob die redis-Befehle für Sie nicht funktionieren, ist, ob Ihre redis-server.pid tatsächlich erstellt wird. Sie geben den Speicherort dieser Datei an

/etc/systemd/system/redis.service 

und es sollte einen Abschnitt haben, der ungefähr so ​​aussieht:

[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

Überprüfen Sie den Speicherort und die Berechtigungen des PIDFile-Verzeichnisses (in meinem Fall '/ run / redis'). Ich habe versucht, den als Bereitstellung angemeldeten Dienst neu zu starten, aber die Verzeichnisberechtigungen wurden als aufgeführt

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

Wenn Sie eine Auffrischung der Linux-Berechtigungen benötigen, überprüfen Sie dies . Das Problem war jedoch, dass ich den Neustart als Bereitstellungsbenutzer ausführte. Die oben genannten Berechtigungen lauten "rx", sodass mein Benutzer nicht in das PIDFile-Verzeichnis schreiben kann.

Als ich das merkte, loggte ich mich mit root ein, wiederholte den Neustartbefehl auf redis ( service redis restart) und alles funktionierte. Das war ein Kopfschmerz, aber hoffentlich spart dies jemandem ein wenig Zeit.

Lauren Marie Lahm
quelle
0

Redis hat einen Konfigurationsparameter pidfile(z. B. /etc/redis.conf - Redis-Quellcode überprüfen ), zum Beispiel:

# 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

Wenn es gesetzt ist oder gesetzt werden könnte, könnte anstelle der Suche nach der Prozess-ID (pid) unter Verwendung der folgenden Optionen Folgendes ps + grepverwendet werden:

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

Bei Bedarf kann man das Redis-Stop-Skript wie folgt erstellen (angepasstes Standard-Skript redis 5.0 init.d im Redis-Quellcode ):

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
Robert Lujo
quelle