2011-08-02 73 views
198

我显然有一个redis-server实例中运行,因为当我尝试通过输入redis-server启动一个新的服务器,我与打招呼以下:如何停止redis服务器?

Opening port: bind: Address already in use 

我无法弄清楚如何停止该服务器并启动一个新的。

当我在CLI中输入时,是否有任何命令可以附加到redis-server

我的操作系统是Ubuntu 10.04。

+0

您使用哪种操作系统和发行版? – yojimbo87

+1

Ubuntu版本10.04。 – Qcom

+0

女士们,先生们,如果您没有通过软件包管理器安装redis,并且您已经从源代码安装了redis,那么它可能无法在Ubuntu上使用systemv或upstart或systemd。因此,所选答案在默认情况下不起作用。第二个答案不明显是正确的,似乎更可靠。 – Donato

回答

283

可以连接到节点实例,并使用shutdown命令,或者如果你是在Ubuntu,你可以尝试通过的init.d重启Redis的服务器:

/etc/init.d/redis-server restart 

或停止/启动:

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

在Mac

redis-cli shutdown 
+5

你只能这样做,如果你这样设置redis。凯文麦蒂格的答案只需最少的设置。 – btk

+32

这不适用于mac – chovy

+1

在OS X上,您可能必须使用'launchctl'来执行此操作,并且在其他系统上使用'systemctl'或'service'。 – tadman

14

尝试killall redis-server。您也可以使用ps aux来查找您的服务器的名称和pid,然后用kill -9 here_pid_number杀死它。

+0

这太好了,适用于mac/unix。 (Mac测试过,unix认可) – ThomasReggi

+16

杀死数据库服务器的坏主意。总是喜欢正确的关机,或者至少杀死-15而不是kill -9。 –

+1

@ZsoltSzilagy你应该提供一个链接或有点解释*为什么*这是一个坏主意。就像redis延迟写入一样,这样内存中仍然存在未被满足的数据。 –

1

我不知道具体的Redis的,但对于一般的服务器:

什么操作系统或分配?通常会有一个stop或/etc/init.d/...命令,能够查找pid文件中的现有pid。

你可以查看哪个进程已经绑定到端口sudo netstat -nlpt(linux选项;其他netstat的风格会有所不同)并指示它停止。我会而不是在运行的服务器上使用kill -9,除非确实没有其他信号或方法关闭它。

177

一个更清洁,更可靠的方法是进入Redis的-CLI和TH连接类型shutdown

在Redis的-CLI中,键入help @server,你会看到这个靠近列表的底部:

SHUTDOWN - 总结:同步方式的数据集保存到磁盘,然后 关闭,因为服务器:0.07

如果你有在终端运行Redis的服务器实例,你会看到这一点:

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... 
+64

或者甚至不要启动redis-cli。只需通过'redis-cli shutdown'从命令行发送它。 (你可以发送这样的命令,例如'redis-cli set cat dog; redis-cli get cat') – JesseBuesking

+5

@jessebuesking评论唯一的警告是如果你设置了密码保护,'redis-cli set猫狗; redis-cli get cat'变为'redis-cli -a mypassword set cat dog; redis-cli -a mypassword get cat',这可能会在几个命令后变得烦人。 – glarrain

+0

@glarrain你可以做的一件事是避免冗余,为你当前的bash会话设置一个别名,例如'alias redis-cli =“redis-cli -a mypassword”'。通过这种方式,您可以在原始评论中拨打电话,而无需在每次使用时重新提供密码。 – JesseBuesking

21

在CLI类型SHUTDOWN

如果你不关心你的内存数据,你也可以输入SHUTDOWN NOSAVE强制关闭服务器。

116

redis-cli shutdown是最有效的。接受的答案不适用于我(OSX Lion)。谢谢,@JesseBuesking。

+0

是的,被接受的答案只适用于Redis以所描述的方式设置为服务的Linux系统 – glarrain

+0

这也适用于Windows。 'redis-cli.exe shutdown' –

22

的OSX我创建用于启动和停止Redis的以下别名(与自制安装的Redis):

alias redstart='redis-server /usr/local/etc/redis/6379.conf' 

alias redstop='redis-cli -h 127.0.0.1 -p 6379 shutdown' 

这为我当地发展伟大的工作。

+0

正是我在找的东西。谢谢! – Petrogad

+2

如果您使用自制软件安装了redis,“brew服务停止redis”也可以使用! :) – Edouardb

+0

我会建议使用* brew服务*现在处理默认值的启动和停止。如果你需要更多的控制,那么还有其他的选择。 –

5

如果你知道在哪个端口上,将运行(默认情况下这将是6379),您可以使用下面的命令来获得使用该端口的进程的PID,然后可以为同一个PID执行kill命令。

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

上面的命令会给你pid。

kill <pid>;

这将关闭服务器。

10

另一种方式可以是:

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

文选* NIX & OSX

+0

这应该是被接受的答案 – JoenasE

11

选项1:去Redis的安装目录,然后导航到src,在我的情况:

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

其中6379是默认端口。

选项2:找到Redis的过程,并杀死

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 

,然后开始杀:

kill -9 22292 

kill -9 22299 

我使用的Centos 6.7,x86_64的

希望它有助于

1

在MacOSX上,

这是对我工作

/etc/init.d/redis restart 

/etc/init.d/redis stop 

/etc/init.d/redis start 
3

在我的情况是:

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

要搞清楚什么是您的服务名称,你可以运行:

sudo updatedb 
locate redis 

它会告诉你在你的系统中的每个Redis的文件。

4

MacOSX的 - 它的工作:)

步骤1:找到先前运行的Redis服务器

ps auxx | grep redis-server 

步骤2:杀死通过找到PID(进程ID)的具体过程 - 的Redis Sever的

kill -9 PID 
1

以下命令适用于我Ubuntu服务器

$ service /etc/init.d/redis_6379 stop 
$ service /etc/init.d/redis_6379 start 
$ service /etc/init.d/redis_6379 restart 
4

停止redis的服务器类型在终端与根用户

sudo service redis-server stop 

的讯息会显示停止redis的服务器

Stopping redis-server: redis-server. 

后如果要启动redis的 - 服务器类型

sudo service redis-server start 

如果要重新启动服务器类型

sudo service redis-server restart 
2

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 
2

通常这个问题后,我关闭了我的电脑(或离开运行)一个不规则的方式出现。我相信口卡住开放,而过程停止但继续绑定到以前的端口。

9/10倍修复可以是:

$ ps aux | grep redis 

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

$ kill 2976 

$ redis-server 

好到哪里去。