Ich habe anscheinend eine redis-server
-Instanz ausgeführt, denn wenn ich versuche, einen neuen Server durch Eingabe von redis-server
zu starten, werde ich mit dem folgenden begrüßt:
Opening port: bind: Address already in use
Ich kann nicht herausfinden, wie ich diesen Server anhalten und einen neuen starten kann.
Gibt es einen Befehl, den ich an redis-server
anfügen kann, wenn ich die CLI eingebe?
Mein Betriebssystem ist Ubuntu 10.04.
Verbinden Sie sich entweder mit der Knoteninstanz und verwenden Sie den Befehl shutdown , oder 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
Eine sauberere, zuverlässigere Methode besteht darin, in redis-cli zu gehen und dann shutdown
einzugeben.
Geben Sie in redis-cli help @server
ein. Sie werden dies am Ende der Liste sehen:
SHUTDOWN - Zusammenfassung: Speichern Sie das Dataset synchron auf der Festplatte und anschließend Fahren Sie den Server seit: 0.07 herunter
Wenn Sie eine Redis-Server-Instanz in einem Terminal ausführen, 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...
redis-cli shutdown
ist am effektivsten. Die akzeptierte Antwort funktioniert bei mir nicht (OSX Lion). Danke, @JesseBuesking.
Für osx habe ich die folgenden Aliase zum Starten und Stoppen von Redis erstellt (Redis mit Homebrew installiert):
alias redstart='redis-server /usr/local/etc/redis/6379.conf'
alias redstop='redis-cli -h 127.0.0.1 -p 6379 shutdown'
Dies hat für die lokale Entwicklung sehr gut funktioniert.
Geben Sie SHUTDOWN
in die CLI ein
oder
wenn Sie sich nicht für Ihre Daten im Speicher interessieren, können Sie auch SHUTDOWN NOSAVE
eingeben, um den Server herunterzufahren.
Versuchen Sie killall redis-server
. Sie können auch ps aux
verwenden, um den Namen und die PID Ihres Servers zu finden, und dann mit kill -9 here_pid_number
beenden.
Option 1: Wechseln Sie in das Installationsverzeichnis von redis und navigieren Sie zu src
. In meinem Fall:
/opt/redis3/src/redis-cli -p 6379 shutdown
dabei ist 6379 der Standardport.
Option 2: Finde Redis-Prozess und töte
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 initiiere kill:
kill -9 22292
kill -9 22299
Ich verwende Centos 6.7, x86_64
ich hoffe es hilft
Ein anderer Weg könnte sein:
ps -ef | grep -i 'redis-server'
kill -9 PID owned by redis
Funktioniert auf * NIX & OSX
stoppen Sie den Redis-Servertyp im Terminal mit root-Benutzer
Sudo service redis-server stop
die Meldung wird angezeigt, nachdem der Redis-Server gestoppt wurde
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
MacOSX - es hat funktioniert :)
Schritt 1: Finden 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) - Redis Sever suchen
kill -9 PID
Wenn Sie wissen, auf welchem Port er ausgeführt wird (standardmäßig 6379), können Sie mit dem Befehl unten die PID des Prozesses abrufen, der diesen Port verwendet, 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öte <pid>
;
Dies würde Ihren Server herunterfahren.
Normalerweise tritt dieses Problem auf, nachdem ich meinen Computer auf unregelmäßige Weise heruntergefahren habe (oder läuft). Ich glaube, der Port bleibt offen, während der Prozess stoppt, aber weiterhin an den vorherigen Port gebunden ist.
9/10 mal kann der Fix 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.
In meinem Fall war es:
/etc/init.d/redismaster stop
/etc/init.d/redismaster start
Um herauszufinden, wie Ihr Dienstname ist, können Sie Folgendes ausführen:
Sudo updatedb
locate redis
Es werden Ihnen alle Redis-Dateien in Ihrem System angezeigt.
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
Ein anderer Weg könnte sein:
brew services stop redis
Folgendes arbeitete für mich an MAC
ps aux | grep 'redis-server' | awk '{print $2}' | xargs Sudo kill -9
Ich weiß es nicht speziell für Redis, aber für Server im Allgemeinen:
Welches Betriebssystem oder welche Distribution? Oft gibt es einen Stop- oder /etc/init.d/... -Befehl, mit dem die vorhandene PID in einer PID-Datei nachgeschlagen werden kann.
Mit Sudo netstat -nlpt
können Sie nachsehen, welcher Prozess bereits an den Port gebunden ist (Linux-Optionen; andere Netstat-Varianten variieren) und signalisieren, dass der Prozess angehalten wird. Ich würde nicht kill -9
auf einem laufenden Server verwenden, es sei denn, es gibt wirklich kein anderes Signal oder eine andere Methode, um es herunterzufahren.
Die folgenden Befehle funktionieren für mich auf Ubuntu Server
$ service /etc/init.d/redis_6379 stop
$ service /etc/init.d/redis_6379 start
$ service /etc/init.d/redis_6379 restart
Unter MacOSX
Das hat bei mir funktioniert
/etc/init.d/redis restart
/etc/init.d/redis stop
/etc/init.d/redis start
Wenn Sie Redis in einem Docker-Container ausführen, hilft keine der vorliegenden Antworten. Sie müssen den Redis-Container anhalten. Andernfalls wird der Redis-Prozess fortgesetzt.
$ docker ps
CONTAINER ID IMAGE PORTS
e1c008ab04a2 bitnami/redis:4.0.8-r0 0.0.0.0:6379->6379/tcp
$ docker stop e1c008ab04a2
e1c008ab04a2
Wenn Sie wissen, auf welchem Port (Standard: 6379) Ihr Redis-Server ausgeführt wird, können Sie mit Option 1 oder Sie können Ihren Redis-Prozess überprüfen und Sie können 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
Zu prüfen, ob die redis-Befehle für Sie nicht funktionieren, ist, ob Ihre redis-server.pid tatsächlich erstellt wird. Sie geben den Speicherort der 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 deploy angemeldeten Dienst neu zu starten, die Verzeichnisberechtigungen wurden jedoch als aufgelistet
drwxrwsr-x 2 redis redis 40 Jul 20 17:37 redis
Wenn Sie eine Auffrischung der Linux-Berechtigungen benötigen, check this out . Das Problem war jedoch, dass ich den Neustart ausgeführt habe, da mein Implementierungsbenutzer die Berechtigung r-x hat und meinem Benutzer nicht erlaubt, in das PIDFile-Verzeichnis zu schreiben.
Nachdem ich das erkannt hatte, loggte ich mich mit root ein, wiederholte den Befehl restart auf dem Redis (service redis restart
) und alles funktionierte. Das war Kopfschmerzen, aber hoffentlich spart dies jemandem etwas Zeit.