Como posso parar o redis-server?

333

Aparentemente, eu tenho uma redis-serverinstância em execução, porque quando tento iniciar um novo servidor digitando redis-server, sou recebido com o seguinte:

Opening port: bind: Address already in use

Não consigo descobrir como parar este servidor e iniciar um novo.

Existe algum comando que eu possa acrescentar redis-serverquando estou digitando na CLI?

Meu sistema operacional é o Ubuntu 10.04.

Qcom
fonte
Qual SO e distribuição você está usando?
precisa saber é o seguinte
Senhoras e Senhores Deputados, se você não instalou o redis através do gerenciador de pacotes e o instalou a partir do código-fonte, ele pode não funcionar com o systemv, o iniciante ou o systemd no ubuntu. Portanto, a resposta selecionada não funcionará por padrão. A segunda resposta, que não está marcada como correta, parece ser mais confiável.
Donato
Dica: é possível testar se um servidor Redis está em execução redis-cli ping. Um servidor Redis em execução responderá com PONG.
Jochem Schulenklopper 06/04/19

Respostas:

552

Conecte-se à instância do nó e use o comando shutdown ou, se você estiver no ubuntu, tente reiniciar o redis server através do init.d:

/etc/init.d/redis-server restart

ou pare / inicie:

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

No Mac

redis-cli shutdown
yojimbo87
fonte
5
Você só pode fazer isso se configurar o redis dessa maneira. A resposta de Kevin McTigue funciona com uma configuração mínima.
Btk
11
No OS X, você provavelmente precisará usar isso launchctlpara fazer isso e em outros sistemas systemctlou service.
11133 tadman
11
Em algumas máquinas, o sudo /etc/init.d/redis stop funciona
TroodoN-Mike
4
No Ubuntu moderno, eu apenas uso service redis-server stope service redis-server startdepois de instalá-lo apt-get install redis-server.
Artisans Cloud
11
Isso funciona apenas se o redis-server estiver sendo executado como um serviço. Se estiver sendo executado como um executável autônomo, será necessário parar explicitamente o processo. Aqui estão os passos que eu usei para parar o processo: pkill redis-servidor em uma máquina Linux
199

Uma maneira mais limpa e confiável é entrar no redis-cli e digitar shutdown

Em redis-cli, digite help @servere você verá isso próximo ao final da lista:

SHUTDOWN - resumo: salve o conjunto de dados de forma síncrona em disco e desligue o servidor desde: 0,07

E se você tiver uma instância redis-server em execução em um terminal, verá o seguinte:

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
fonte
73
Ou nem comece a redis-cli. Basta enviá-lo a partir da linha de comando via redis-cli shutdown. (você pode enviar qualquer comando como este, por exemplo redis-cli set cat dog; redis-cli get cat)
JesseBuesking
6
A única ressalva ao comentário @jessebuesking é que, se você configurou a proteção por senha, redis-cli set cat dog; redis-cli get catmuda para redis-cli -a mypassword set cat dog; redis-cli -a mypassword get cat, o que pode ser irritante após alguns comandos.
glarrain
@glarrain Uma coisa que você pode fazer para evitar a redundância é definir um alias para sua sessão atual do bash, por exemplo alias redis-cli="redis-cli -a mypassword". Dessa forma, você pode fazer as chamadas como no meu comentário original sem precisar fornecer sua senha novamente a cada uso.
JesseBuesking
@jessebuesking muito criativo! Não teria pensado em solução. Por alguma razão eu sou um pouco de medo de colocar senhas em arquivos de configuração
glarrain
@glarrain não aceite minha palavra, mas acho que isso só a armazenará na memória da sessão atual (ou seja, não a adicione ao seu bashrc ou bash_profile, digite-a como está no seu prompt).
JesseBuesking
141

redis-cli shutdowné mais eficaz. A resposta aceita não funciona para mim (OSX Lion). Obrigado, @JesseBuesking.

SimplGy
fonte
sim, a resposta aceita só funciona para sistemas Linux com Redis configurado como um serviço da maneira descrita
glarrain
2
Isso também funciona no Windows. redis-cli.exe shutdown
Brandon Boone
Como mencionei acima, é uma pena que esse método (bastante óbvio) seja tão difícil de encontrar. Eu esperava que isso redis-cli --helppudesse ter coberto esse caso.
Jochem Schulenklopper 06/04/19
41

Para o OSX, criei os seguintes aliases para iniciar e parar redis(instalado com o Homebrew):

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

Isso funcionou muito bem para o desenvolvimento local!

Agora, o Homebrew tem homebrew-servicesque pode ser usado para iniciar, parar e reiniciar serviços. homebrew-services

brew services é instalado automaticamente quando executado.

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

Se você usar run, ele não será iniciado no login (nem na inicialização). startiniciará o redisserviço e o adicionará no login e na inicialização.

Ray Hunter
fonte
3
Se você instalou o redis usando o homebrew, brew services stop redistambém funciona! :)
Edouard Berthe
Eu recomendaria o uso de serviços de fermentação agora para lidar com o início e a parada dos padrões. Se você precisar de um pouco mais de controle, também há outras opções.
Ray Hunter
11
Esta é a melhor resposta, pois funciona em todos os tipos de linux e mac, incluindo aqueles instalados usando apt, yum, brew ou download. Se eles têm scripts iniciais ou de inicialização ou do sistema d ou não. Obrigado
doesnt_matter
11
Eu gosto do nome dos pseudônimos :) Legal!
Thinklinux 17/10/19
11
o que devo fazer se eu quiser reiniciar e não desligamento @RayHunter
AATHITH RAJENDRAN
25

Digite SHUTDOWNa CLI

ou

se você não se importa com os dados na memória, também pode digitar SHUTDOWN NOSAVEpara forçar o desligamento do servidor.

user1651082
fonte
16

Tente killall redis-server. Você também pode usar ps auxpara encontrar o nome e o pid do seu servidor e depois matá-lo kill -9 here_pid_number.

ciembor
fonte
Isso é ótimo, funciona em mac / unix. (Mac testado, unix aprovado)
ThomasReggi
24
Má idéia para matar com dificuldade um servidor de banco de dados. Sempre prefira um desligamento adequado, ou pelo menos, mate -15 em vez de mate -9.
Zsolt Szilagyi
2
@ZsoltSzilagy, você deve fornecer um link ou uma explicação para a má idéia. Como o redis faz gravações atrasadas, para que ainda haja dados não confirmados na memória.
Notoback.jpeg #
5
@ notbad.jpeg, é claro, você também pode deixar seu computador cair no chão. Se a tabela for alta o suficiente, isso também deve parar o servidor. Preciso de um link ou de uma explicação sobre por que essa é uma má idéia?
osa
2
Com esse método, você não está pensando no estado do banco de dados redis. Você está usando uma funcionalidade do SO para encerrar um aplicativo em vez de usar o próprio aplicativo ou um daemon, que provavelmente também está usando a funcionalidade do aplicativo. Essa solução é como desconectar o cabo para desligar a TV.
Jesus
15

Opção 1: vá para o diretório de instalação do redis e navegue para src, no meu caso:

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

onde 6379 é a porta padrão.

Opção 2: encontre processo redis e mate

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

E então inicie o kill:

kill -9 22292

kill -9 22299

Estou usando o Centos 6.7, x86_64

espero que ajude

App Work
fonte
12

interrompa o tipo de servidor redis no terminal com usuário root

sudo service redis-server stop

a mensagem será exibida após parar o servidor redis

Stopping redis-server: redis-server.

se você deseja iniciar o tipo redis-server

sudo service redis-server start

se você deseja reiniciar o tipo de servidor

sudo service redis-server restart
denny
fonte
Gostaria de saber se isso ainda é válido para novas versões do Redis, se configurado por padrão. A emissão service --status-allnão mostrará redis; portanto, qualquer servicecomando falhará redis-server. Mas os redis aparecem ps -ef. Não consigo encontrar nenhum documento relacionado.
themefield
Olha no Ubuntu 18.04 sudo service redis start/stop/statusfaz o mesmo, ambos vão.
frmbelz 14/01
10

Outra maneira poderia ser:

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

Funciona em * NIX e OSX

smace
fonte
11
@ JoenasE, não, esta não deve ser a resposta aceita IMO. O fato de o sistema operacional matar um processo em execução negligencia o caso de o aplicativo ter alguns dados na memória ainda não salvos em um armazenamento mais persistente. Desligar o aplicativo por meio de um método fornecido pelo aplicativo é, de preferência, uma opção melhor.
Jochem Schulenklopper 06/04/19
6

MacOSX - Funcionou :)

Etapa 1: Encontre o servidor Redis em execução anteriormente

ps auxx | grep redis-server

Etapa 2: Finalize o processo específico, localizando PID (Process ID) - Redis Sever

kill -9 PID
Karthekeyan Devanand
fonte
5

Se você souber em qual porta estaria executando (por padrão, seria 6379), poderá usar o comando abaixo para obter o pid do processo usando essa porta e, em seguida, executar o comando kill para o mesmo pid.

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

o comando acima lhe dará pid.

matar <pid>;

Isso encerraria o servidor.

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

Normalmente, esse problema surge depois que eu desligo o computador (ou deixo de funcionar) de maneira irregular. Acredito que a porta fica presa, enquanto o processo para, mas continua ligado à porta anterior.

9/10 vezes a correção pode 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

Bom para ir.

SerKnight
fonte
3

No meu caso, foi:

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

Para descobrir qual é o nome do seu serviço, você pode executar:

sudo updatedb
locate redis

E ele mostrará todos os arquivos Redis no seu sistema.

joan16v
fonte
3

Se você fez a instalação (por exemplo, ubuntu) durante a instalação do redis , você pode:

redis-cli shutdown

como apontado por @ yojimbo87 :)

gia huy
fonte
2

Outra maneira poderia ser:

brew services stop redis
Ihor Pavlyk
fonte
+10 para isso, funciona sem desculpas no mac! isso também funciona ™ serviços de fermentação iniciam redis ™ ¢ serviços de fermentação reiniciam redis ¢
Victor.Uduak
2

A seguir trabalhou para mim no MAC

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

Se você estiver executando o redis em um contêiner de docker, nenhuma das respostas presentes ajudará. Você deve parar o contêiner redis. Caso contrário, o processo redis continuará a aparecer.

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

Se você souber em qual porta (padrão: 6379) o servidor redis está em execução, você poderá ir com a opção 1 ou verificar seu processo redis e poderá matar com a opção 2

opção 1:
Finalize o processo na porta:

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

opção 2:
encontre o servidor Redis em execução anteriormente:

 ps auxx | grep redis-server

Mate o processo específico encontrando PID (ID do processo) - Redis Sever

kill -9 PID

Agora inicie seu servidor redis com

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

Eu não sei especificamente para redis, mas para servidores em geral:

Qual SO ou distribuição? Freqüentemente, haverá um comando stop ou /etc/init.d / ... que poderá procurar o pid existente em um arquivo pid.

Você pode procurar com qual processo já está vinculado à porta sudo netstat -nlpt(opções do linux; outros tipos de netstat variarão) e sinalizar para que pare. Eu não usaria kill -9em um servidor em execução, a menos que realmente não haja outro sinal ou método para desligá-lo.

ysth
fonte
1

Os comandos abaixo funcionam para mim no Ubuntu Server

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

No MacOSX,

Isto é o que funcionou para mim

/etc/init.d/redis restart

/etc/init.d/redis stop

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

Uma coisa para verificar se os comandos redis não estão funcionando para você é se seu redis-server.pid está realmente sendo criado. Você especifica o local em que esse arquivo está

/etc/systemd/system/redis.service 

e deve ter uma seção parecida com esta:

[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 a localização e as permissões do diretório PIDFile (no meu caso, '/ run / redis'). Eu estava tentando reiniciar o serviço conectado como implantação, mas as permissões do diretório foram listadas como

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

Se você precisar de uma atualização das permissões do Linux, verifique isso . Mas o problema era que eu estava executando a reinicialização como meu usuário de implantação, cujas permissões acima são rx, não permitindo que meu usuário grave no diretório PIDFile.

Depois que percebi isso, entrei usando root, execute novamente o comando restart no redis ( service redis restart) e tudo funcionou. Isso foi uma dor de cabeça, mas espero que isso poupe a alguém um pouco de tempo.

Lauren Marie Lahm
fonte
0

Redis possui parâmetro de configuração pidfile(por exemplo, /etc/redis.conf - verifique o código-fonte redis ), por exemplo:

# 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

Se estiver definido ou puder ser definido, em vez de procurar a identificação do processo (pid) usando ps + grepalgo como isto, poderá ser usado:

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

Se necessário, é possível fazer o redis parar um script como este ( script redis 5.0 init.d padrão adaptado no código-fonte 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
fonte