提问



我显然有一个redis-server实例正在运行,因为当我尝试通过输入redis-server来启动一个新服务器时,我接受了以下内容:


Opening port: bind: Address already in use


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


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


我的操作系统是Ubuntu 10.04。

最佳参考


连接到节点实例并使用shutdown命令,或者如果您使用的是ubuntu,则可以尝试通过init.d重新启动redis服务器:[44]


/etc/init.d/redis-server restart


或停止/启动它:


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


在Mac上


redis-cli shutdown

其它参考1


更清晰,更可靠的方法是进入redis-cli然后输入shutdown


在redis-cli中,输入help @server,您会在列表底部附近看到:



  SHUTDOWN - 摘要:同步将数据集保存到磁盘然后
  从那时起关闭服务器:0.07



如果您在终端中运行了redis-server实例,您将会看到:


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

其它参考2


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

其它参考3


对于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'


这对我来说非常适合当地的发展。

其它参考4


在CLI中输入SHUTDOWN


要么


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

其它参考5


试试killall redis-server。您也可以使用ps aux查找服务器的名称和pid,然后使用kill -9 here_pid_number将其终止。

其它参考6


选项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


希望能帮助到你

其它参考7


另一种方式可能是:


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


适用于* NIX& OSX

其它参考8


MacOSX - 它工作了:)


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


ps auxx | grep redis-server


步骤2:通过查找PID(进程ID) - Redis Sever来终止特定进程


kill -9 PID

其它参考9


使用root用户停止终端中的redis服务器类型


sudo service redis-server stop


停止redis-server后将显示该消息


Stopping redis-server: redis-server.


如果要启动redis-server类型


sudo service redis-server start


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


sudo service redis-server restart

其它参考10


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


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


上面的命令会给你pid。


<pid>;


这会关闭您的服务器。

其它参考11


在我的情况下它是:


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


要找出您的服务名称,您可以运行:


sudo updatedb
locate redis


它将显示系统中的每个Redis文件。

其它参考12


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

其它参考13


通常这个问题出现在我关闭我的计算机(或离开运行)不规则的方式..我相信端口卡住打开,而进程停止但继续绑定到以前的端口。


修复的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


很高兴去。

其它参考14


我不是专门知道redis,但对于一般的服务器:


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


您可以使用sudo netstat -nlpt(linux选项;其他netstat风格会有所不同)查找已绑定到端口的进程,并发出信号停止。我会不在正在运行的服务器上使用kill -9,除非确实没有其他信号或方法将其关闭。

其它参考15


以下命令适用于 Ubuntu Server


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

其它参考16


在MacOSX上,


这对我有用


/etc/init.d/redis restart

/etc/init.d/redis stop

/etc/init.d/redis start

其它参考17


另一种方式可能是:


brew services stop redis

其它参考18


检查redis命令是否不适合你的一件事是你的redis-server.pid是否真正被创建了。您可以指定此文件所在的位置


/etc/systemd/system/redis.service 


它应该有一个看起来像这样的部分:


[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


检查PIDFile目录的位置和权限(在我的例子中,/run/redis)。我试图重新启动以部署方式登录的服务,但目录权限列为


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


如果您需要更新linux权限,请查看此信息。但问题是我正在执行重启作为我的部署用户,上面的权限是r-x,不允许我的用户写入PIDFile目录。[45]


一旦我意识到这一点,我使用root登录,重新启动redis上的restart命令(service redis restart)并且一切正常。这是一个令人头痛的问题,但希望这可以节省一些时间。