¿Cómo puedo detener redis-server?

335

Aparentemente tengo una redis-serverinstancia ejecutándose porque cuando intento iniciar un nuevo servidor ingresando redis-server, me saludan con lo siguiente:

Opening port: bind: Address already in use

No puedo entender cómo detener este servidor e iniciar uno nuevo.

¿Hay algún comando que pueda agregar redis-servercuando estoy escribiendo en la CLI?

Mi sistema operativo es Ubuntu 10.04.

Qcom
fuente
¿Qué sistema operativo y distribución estás usando?
yojimbo87
Señoras y señores, si no instalaron redis a través del administrador de paquetes y lo instalaron desde la fuente, entonces podría no funcionar con systemv o upstart o systemd en ubuntu. Por lo tanto, la respuesta seleccionada no funcionará por defecto. La segunda respuesta, que no está marcada como correcta, parece ser más confiable.
Donato
Consejo: la prueba de si un servidor Redis se está ejecutando se puede hacer a través de redis-cli ping. Un servidor Redis en ejecución responderá con PONG.
Jochem Schulenklopper

Respuestas:

555

Conéctese a la instancia del nodo y use el comando de apagado o si está en ubuntu, puede intentar reiniciar el servidor redis a través de init.d:

/etc/init.d/redis-server restart

o detenerlo / iniciarlo:

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

En Mac

redis-cli shutdown
yojimbo87
fuente
55
Solo puede hacerlo si configura redis de esa manera. La respuesta de Kevin McTigue funciona con una configuración mínima.
btk
1
En OS X probablemente tendrá que usar launchctlpara hacer esto, y en otros sistemas, systemctlo service.
tadman
1
En algunas máquinas sudo /etc/init.d/redis stop funcionará
TroodoN-Mike
44
En Ubuntu moderno, solo uso service redis-server stopy service redis-server start, después de haberlo instalado con apt-get install redis-server.
Cloud Artisans
1
Esto solo funciona si tiene redis-server ejecutándose como un servicio. Si se ejecuta como un ejecutable independiente, deberá detener explícitamente el proceso. Estos son los pasos que utilicé para detener el proceso: pkill redis-server en una caja de linux
199

Una forma más limpia y confiable es entrar en redis-cli y luego escribir shutdown

En redis-cli, escriba help @servery verá esto cerca del final de la lista:

APAGADO - resumen: guarde sincrónicamente el conjunto de datos en el disco y luego apague el servidor desde: 0.07

Y si tiene una instancia de redis-server ejecutándose en una terminal, verá esto:

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
fuente
73
O ni siquiera comiences redis-cli. Simplemente envíelo desde la línea de comando a través de redis-cli shutdown. (puede enviar cualquier comando como este, por ejemplo redis-cli set cat dog; redis-cli get cat)
JesseBuesking
66
La única advertencia para el comentario de @jessebuesking es que si ha configurado la protección con contraseña, redis-cli set cat dog; redis-cli get catcambia a redis-cli -a mypassword set cat dog; redis-cli -a mypassword get cat, lo que puede ser molesto después de algunos comandos.
glarrain
@glarrain, una cosa que puede hacer para evitar la redundancia es establecer un alias para su sesión de bash actual, por ejemplo alias redis-cli="redis-cli -a mypassword". De esta manera, puede hacer las llamadas como en mi comentario original sin tener que volver a proporcionar su contraseña en cada uso.
JesseBuesking
@jessebuesking muy creativo! No habría pensado en la solución. Por alguna razón, tengo un poco de miedo de poner contraseñas en los archivos de configuración
glarrain
@glarrain no confía en mi palabra, pero creo que hacer esto solo lo almacenará en la memoria para la sesión actual (es decir, no lo agregue a su bashrc o bash_profile, simplemente ingréselo como está desde su solicitud).
JesseBuesking
141

redis-cli shutdownEs más efectivo. La respuesta aceptada no funciona para mí (OSX Lion). Gracias, @JesseBuesking.

SimplGy
fuente
sí, la respuesta aceptada funciona solo para sistemas Linux con Redis configurado como un servicio en la forma descrita
glarrain
2
Esto también funciona en Windows. redis-cli.exe shutdown
Brandon Boone
Como mencioné anteriormente, es una pena que este método (bastante obvio) sea tan difícil de encontrar. Esperaba que eso redis-cli --helppudiera haber cubierto este caso.
Jochem Schulenklopper
42

Para OSX, creé los siguientes alias para iniciar y detener redis(instalado con Homebrew):

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

¡Esto ha funcionado muy bien para el desarrollo local!

Homebrew ahora tiene homebrew-servicesque se puede usar para iniciar, detener y reiniciar servicios. servicios de elaboración casera

brew services se instala automáticamente cuando se ejecuta.

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

Si lo usa run, no lo iniciará al iniciar sesión (ni al arrancar). startiniciará el redisservicio y lo agregará al iniciar sesión y arrancar.

Ray Hunter
fuente
3
Si instaló redis usando homebrew, ¡ brew services stop redistambién funciona! :)
Edouard Berthe
Recomendaría usar los servicios de preparación ahora para manejar el inicio y la detención de los valores predeterminados. Si necesita un poco más de control, también hay otras opciones.
Ray Hunter
1
Esta es la mejor respuesta, ya que funciona en todos los sabores de Linux y Mac, incluidos los instalados mediante apt, yum, brew o descarga. Ya sea que tengan secuencias de comandos de inicio o de inicio o sistema d o no. Gracias
doesnt_matter
1
Me gusta el nombre de los alias :) ¡Genial!
thinklinux
1
¿Qué debo hacer si quiero reiniciar y no apagar? @RayHunter
AATHITH RAJENDRAN
25

Escriba SHUTDOWNla CLI

o

Si no le importan sus datos en la memoria, también puede escribir SHUTDOWN NOSAVEpara forzar el apagado del servidor.

usuario1651082
fuente
16

Tratar killall redis-server. También puede usar ps auxpara encontrar el nombre y el pid de su servidor, y luego matarlo con kill -9 here_pid_number.

ciembor
fuente
Esto es genial, funciona en mac / unix. (Mac probado, aprobado por Unix)
ThomasReggi
24
Mala idea para matar a un servidor DB. Siempre prefiera un apagado adecuado, o al menos, mate -15 en lugar de matar -9.
Zsolt Szilagyi
2
@ZsoltSzilagy debe proporcionar un enlace o una explicación de por qué es una mala idea. Como cómo redis hace escrituras retrasadas, de modo que todavía habrá datos no confirmados en la memoria.
notbad.jpeg
55
@ notbad.jpeg, por supuesto, también puede tirar su computadora al suelo. Si la tabla es lo suficientemente alta, esto también debería detener el servidor. ¿Necesito un enlace o una explicación de por qué es una mala idea?
osa
2
Con este método no estás pensando en el estado de la base de datos redis. Estás usando una funcionalidad del sistema operativo para cerrar una aplicación en lugar de usar la aplicación en sí o un demonio, que probablemente también esté usando la funcionalidad de la aplicación. Esta solución es como desenchufar el cable para apagar el televisor.
Jesús
15

Opción 1: vaya al directorio de instalación de redis y navegue hasta src, en mi caso:

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

donde 6379 es el puerto predeterminado.

Opción 2: encontrar el proceso de redis y matar

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

Y luego iniciar matar:

kill -9 22292

kill -9 22299

Estoy usando Centos 6.7, x86_64

Espero eso ayude

App Work
fuente
12

detener el tipo de servidor redis en terminal con usuario root

sudo service redis-server stop

el mensaje se mostrará después de detener el servidor redis

Stopping redis-server: redis-server.

si desea iniciar el tipo de servidor redis

sudo service redis-server start

si quieres reiniciar el tipo de servidor

sudo service redis-server restart
denny
fuente
Me pregunto si esto todavía es válido para las nuevas versiones de Redis si está configurado de manera predeterminada. La emisión service --status-allno mostrará redis, por lo tanto, cualquier servicecomando fallará redis-server. Pero Redis se muestra ps -ef. Simplemente no puedo encontrar ningún documento relacionado.
themefield
Parece que Ubuntu 18.04 sudo service redis start/stop/statushace lo mismo, ambos van.
Frmbelz
10

Otra forma podría ser:

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

Funciona en * NIX y OSX

smace
fuente
1
@JoenasE, no, esta no debería ser la respuesta aceptada de la OMI. Hacer que el sistema operativo elimine un proceso en ejecución descuida el caso de que la aplicación pueda tener algunos datos en la memoria aún no guardados en un almacén más persistente. Cerrar la aplicación a través de un método proporcionado por la aplicación es preferiblemente una mejor opción.
Jochem Schulenklopper
6

MacOSX - Funcionó :)

Paso 1: busque el servidor Redis que se ejecutaba anteriormente

ps auxx | grep redis-server

Paso 2: elimine el proceso específico buscando PID (ID de proceso) - Redis Sever

kill -9 PID
Karthekeyan Devanand
fuente
5

Si sabe en qué puerto se estaría ejecutando (de manera predeterminada sería 6379), puede usar el siguiente comando para obtener el pid del proceso utilizando ese puerto y luego puede ejecutar el comando kill para el mismo pid.

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

el comando anterior te dará pid.

matar <pid>;

Esto apagaría su servidor.

cptjack
fuente
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
fuente
5

Por lo general, este problema surge después de que apago mi computadora (o la dejo ejecutándose) de manera irregular. Creo que el puerto se queda atascado, mientras que el proceso se detiene pero continúa vinculado al puerto anterior.

9/10 veces la solución puede ser:

$ ps aux | grep redis

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

$ kill 2976

$ redis-server

Bueno para ir.

SerKnight
fuente
3

En mi caso fue:

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

Para saber cuál es el nombre de su servicio, puede ejecutar:

sudo updatedb
locate redis

Y le mostrará todos los archivos Redis en su sistema.

joan16v
fuente
3

si realizó la instalación (por ejemplo, ubuntu) mientras instalaba redis , puede hacer:

redis-cli shutdown

como lo señaló @ yojimbo87 :)

gia huy
fuente
2

Otra forma podría ser:

brew services stop redis
Ihor Pavlyk
fuente
¡+10 por esto, funciona sin disculpas en mac! esto también funciona ™ los servicios de preparación inician redis ™ ¢ los servicios de preparación reinician redis ¢
Victor.Uduak
2

Siguiente funcionó para mí en MAC

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

Si está ejecutando redis en un contenedor acoplable, ninguna de las respuestas actuales le ayudará. Tienes que detener el contenedor redis. De lo contrario, el proceso de redis seguirá reapareciendo.

$ 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
fuente
2

Si sabe en qué puerto (predeterminado: 6379) se está ejecutando su servidor redis, puede ir con la opción 1 o puede verificar su proceso de redis y puede matar con la opción 2

opción 1:
Proceso de eliminación en el puerto:

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

opción 2:
buscar el servidor Redis que se estaba ejecutando anteriormente

 ps auxx | grep redis-server

Elimine el proceso específico buscando PID (ID de proceso) - Redis Sever

kill -9 PID

Ahora inicie su servidor redis con

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

No sé específicamente para redis, pero para servidores en general:

¿Qué sistema operativo o distribución? A menudo habrá un comando stop o /etc/init.d / ... que podrá buscar el pid existente en un archivo pid.

Puede buscar qué proceso ya está vinculado al puerto con sudo netstat -nlpt(opciones de Linux; otros sabores de netstat variarán) y señalar que se detenga. Yo no utilizo kill -9en un servidor que ejecuta a menos que realmente no hay otra señal o método para apagarlo.

ysth
fuente
1

Los siguientes comandos me funcionan en Ubuntu Server

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

En MacOSX,

Esto es lo que funcionó para mí.

/etc/init.d/redis restart

/etc/init.d/redis stop

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

Una cosa para verificar si los comandos redis no funcionan para usted es si su redis-server.pid realmente se está creando. Usted especifica la ubicación de dónde está este archivo

/etc/systemd/system/redis.service 

y debería tener una sección que se vea así:

[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

Verifique la ubicación y los permisos del directorio PIDFile (en mi caso, '/ run / redis'). Estaba intentando reiniciar el servicio conectado como despliegue, pero los permisos del directorio estaban listados como

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

Si necesita una actualización de los permisos de Linux, consulte esto . Pero el problema era que estaba ejecutando el reinicio como mi usuario de implementación, cuyos permisos anteriores son rx, no permitiendo que mi usuario escriba en el directorio PIDFile.

Una vez que me di cuenta de eso, inicié sesión con root, volví a ejecutar el comando de reinicio en redis ( service redis restart) y todo funcionó. Eso fue un dolor de cabeza, pero espero que esto le ahorre a alguien un poco de tiempo.

Lauren Marie Lahm
fuente
0

Redis tiene un parámetro de configuración pidfile(por ejemplo, /etc/redis.conf - verifique el código fuente de redis ), por ejemplo:

# 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

Si está configurado o podría establecerse, en lugar de buscar el id de proceso (pid) usando ps + grepalgo como esto podría usarse:

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

Si es necesario, se puede hacer un script de detención de redis como este ( script predeterminado adaptado redis 5.0 init.d en el código fuente de 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
Robert Lujo
fuente