J'ai apparemment une instance redis-server
en cours d'exécution, car lorsque j'essaie de démarrer un nouveau serveur en entrant redis-server
, les messages suivants sont reçus:
Opening port: bind: Address already in use
Je n'arrive pas à comprendre comment arrêter ce serveur et en démarrer un nouveau.
Existe-t-il une commande que je peux ajouter à redis-server
lorsque je tape dans la CLI?
Mon système d'exploitation est Ubuntu 10.04.
Connectez-vous à une instance de noeud et utilisez shutdown command ou, si vous êtes sur Ubuntu, vous pouvez essayer de redémarrer le serveur Redis via init.d
/etc/init.d/redis-server restart
ou arrêter/démarrer:
/etc/init.d/redis-server stop
/etc/init.d/redis-server start
Sur Mac
redis-cli shutdown
Une méthode plus propre et plus fiable consiste à entrer dans redis-cli, puis à taper shutdown
Dans redis-cli, tapez help @server
et vous verrez ceci au bas de la liste:
SHUTDOWN - summary: enregistrez le jeu de données sur le disque de manière synchrone, puis arrêter le serveur depuis: 0.07
Et si vous avez une instance de serveur Redis s'exécutant dans un terminal, vous verrez ceci:
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
est le plus efficace. La réponse acceptée ne fonctionne pas pour moi (OSX Lion). Merci, @ JesseBuesking.
Pour osx, j'ai créé les alias suivants pour démarrer et arrêter redis (redis est installé avec homebrew):
alias redstart='redis-server /usr/local/etc/redis/6379.conf'
alias redstop='redis-cli -h 127.0.0.1 -p 6379 shutdown'
Cela a très bien fonctionné pour moi pour le développement local.
Tapez SHUTDOWN
dans la CLI
ou
si vous ne vous souciez pas de vos données en mémoire, vous pouvez également taper SHUTDOWN NOSAVE
pour forcer l'arrêt du serveur.
Essayez killall redis-server
. Vous pouvez également utiliser ps aux
pour trouver le nom et le pid de votre serveur, puis le tuer avec kill -9 here_pid_number
.
Option 1: accédez au répertoire d'installation de redis et accédez à src
, dans mon cas:
/opt/redis3/src/redis-cli -p 6379 shutdown
où 6379 est le port par défaut.
Option 2: trouver le processus redis et tuer
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
Et puis initier tuer:
kill -9 22292
kill -9 22299
J'utilise Centos 6.7, x86_64
j'espère que ça aide
Une autre façon pourrait être:
ps -ef | grep -i 'redis-server'
kill -9 PID owned by redis
Fonctionne sur * NIX & OSX
arrête le type de serveur redis dans le terminal avec l'utilisateur root
Sudo service redis-server stop
le message sera affiché après l'arrêt du serveur redis
Stopping redis-server: redis-server.
si vous voulez démarrer le type de serveur redis
Sudo service redis-server start
si vous voulez redémarrer le type de serveur
Sudo service redis-server restart
MacOSX - Cela a fonctionné :)
Étape 1: Trouvez le serveur Redis précédemment en cours d'exécution
ps auxx | grep redis-server
Étape 2: Éliminer le processus spécifique en recherchant le PID (ID du processus) - Redis Sever
kill -9 PID
Si vous savez sur quel port il serait exécuté (par défaut ce serait 6379), vous pouvez utiliser la commande ci-dessous pour obtenir le pid du processus utilisant ce port, puis exécuter la commande kill pour le même pid.
Sudo lsof -i : <port> | awk '{print $2}'
la commande ci-dessus vous donnera pid.
kill <pid>
;
Cela arrêterait votre serveur.
Habituellement, ce problème survient après que j'arrête mon ordinateur (ou que je le laisse en marche) de manière irrégulière. Je crois que le port reste bloqué pendant que le processus s'arrête mais reste lié au port précédent.
9/10 fois le correctif peut être:
$ ps aux | grep redis
-> MyUser 2976 0.0 0.0 2459704 320 ?? S Wed01PM 0:29.94 redis-server *:6379
$ kill 2976
$ redis-server
Bon pour y aller.
Dans mon cas c'était:
/etc/init.d/redismaster stop
/etc/init.d/redismaster start
Pour savoir quel est le nom de votre service, vous pouvez exécuter:
Sudo updatedb
locate redis
Et il vous montrera tous les fichiers Redis de votre système.
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
Une autre façon pourrait être:
brew services stop redis
Après travaillé pour moi sur MAC
ps aux | grep 'redis-server' | awk '{print $2}' | xargs Sudo kill -9
Je ne sais pas spécifiquement pour Redis, mais pour les serveurs en général:
Quel OS ou distribution? Il y aura souvent une commande stop ou /etc/init.d/... qui sera capable de rechercher le pid existant dans un fichier pid.
Vous pouvez rechercher le processus déjà lié au port avec Sudo netstat -nlpt
(options linux; les variantes de netstat varient) et lui indiquer de s’arrêter. Je voudrais pas utiliser kill -9
sur un serveur en cours d'exécution à moins qu'il n'y ait vraiment aucun autre signal ou méthode permettant de l'éteindre.
Les commandes ci-dessous fonctionnent pour moi sur Ubuntu Server
$ service /etc/init.d/redis_6379 stop
$ service /etc/init.d/redis_6379 start
$ service /etc/init.d/redis_6379 restart
Sur MacOSX,
C'est ce qui a fonctionné pour moi
/etc/init.d/redis restart
/etc/init.d/redis stop
/etc/init.d/redis start
Si vous exécutez redis dans un conteneur Docker, aucune des réponses actuelles ne vous aidera. Vous devez arrêter le conteneur Redis. Sinon, le processus redis continuera à respirer.
$ docker ps
CONTAINER ID IMAGE PORTS
e1c008ab04a2 bitnami/redis:4.0.8-r0 0.0.0.0:6379->6379/tcp
$ docker stop e1c008ab04a2
e1c008ab04a2
Si vous savez sur quel port (par défaut: 6379) votre serveur Redis est en marche, vous pouvez aller avec option 1 ou vous pouvez vérifier votre processus Redis et vous pouvez tuer avec option 2
Option 1:
Tuer le processus sur le port:
check : Sudo lsof -t -i:6379
kill : Sudo kill `Sudo lsof -t -i:6379`
Option 2:
Recherchez le serveur Redis précédemment en cours d’exécution:
ps auxx | grep redis-server
Tuez le processus spécifique en recherchant un PID (ID de processus) - Redis Sever
kill -9 PID
Maintenant démarrez votre serveur Redis avec
redis-server /path/to/redis.conf
Une chose à vérifier si les commandes redis ne fonctionnent pas pour vous est si votre redis-server.pid est en cours de création. Vous spécifiez l'emplacement de ce fichier
/etc/systemd/system/redis.service
et il devrait avoir une section qui ressemble à ceci:
[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
Vérifiez l'emplacement et les autorisations du répertoire PIDFile (dans mon cas, '/ run/redis'). J'essayais de redémarrer le service connecté en tant que déploiement mais les autorisations de répertoire étaient répertoriées comme
drwxrwsr-x 2 redis redis 40 Jul 20 17:37 redis
Si vous avez besoin d'un rappel sur les permissions de linux, vérifiez ceci . Mais le problème était que j'exécutais le redémarrage en tant qu'utilisateur déployé pour lequel les autorisations ci-dessus sont définies sur r-x, ne permettant pas à l'utilisateur d'écrire dans le répertoire PIDFile.
Une fois que j'ai compris cela, je me suis connecté à l'aide de root, j'ai relancé la commande de redémarrage sur le redis (service redis restart
) et tout a fonctionné. C'était un mal de tête, mais j'espère que cela fera gagner un peu de temps à quelqu'un.