如何停止redis-server?

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

Opening port: bind: Address already in use

我不知道如何停止这个服务器,并启动一个新的。

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

我的操作系统是Ubuntu 10.04。

693822 次浏览

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

我不知道redis的具体情况,但对于一般的服务器来说:

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

你可以用sudo netstat -nlpt (linux选项;其他netstat口味会有所不同),并发出停止的信号。我将在运行中的服务器上使用,除非确实没有其他信号或方法来关闭它。

连接到节点实例并使用关闭命令,或者如果你在ubuntu上,你可以尝试通过init.d重新启动redis服务器:

/etc/init.d/redis-server restart

或者stop/start it:

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

在Mac

redis-cli shutdown

一个更干净、更可靠的方法是进入redis-cli,然后键入shutdown

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

SHUTDOWN - summary:同步保存数据集到磁盘,然后 关闭服务器,因为: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...

在CLI中输入SHUTDOWN

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

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

对于OSX,我创建了以下别名用于启动和停止redis(安装在Homebrew中):

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

这对当地的发展很有帮助!

Homebrew现在有homebrew-services,可以用来启动、停止和重新启动服务。homebrew-services

brew services在运行时自动安装。

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

如果你使用run,那么它将不会在登录(或引导)时启动它。start将启动redis服务,并在登录和引导时添加它。

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

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

上面的命令将为您提供pid。

杀死<pid>;

这将关闭您的服务器。

另一种方式是:

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

适用于*NIX &OSX

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

kill -9 22292


kill -9 22299

我使用的是Centos 6.7, x86_64

希望能有所帮助

MacOSX,

这对我来说很管用

/etc/init.d/redis restart


/etc/init.d/redis stop


/etc/init.d/redis start

我的情况是:

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

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

sudo updatedb
locate redis

它会显示你系统中的每一个Redis文件。

MacOSX -它工作了:)

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

ps auxx | grep redis-server

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

kill -9 PID

下面的命令适用于我的Ubuntu的服务器

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

以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

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

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

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

准备好了。

另一种方式是:

brew services stop redis

检查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目录。

当我意识到这一点时,我使用root登录,在redis (service redis restart)上重新运行重启命令,一切都工作了。这很让人头疼,但希望这能为大家节省一点时间。

以下是我在MAC上的工作

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

如果你在docker容器中运行redis,目前的答案都没有帮助。你必须停止redis容器。否则,redis进程会一直刷新。

$ docker ps
CONTAINER ID        IMAGE                    PORTS
e1c008ab04a2        bitnami/redis:4.0.8-r0   0.0.0.0:6379->6379/tcp


$ docker stop e1c008ab04a2
e1c008ab04a2

如果你知道你的redis服务器在哪个端口(默认值:6379)上运行,你可以使用选项1,或者你可以检查你的redis进程,你可以用选项2杀死

选项1:
端口上的终止进程:

check     : sudo lsof -t -i:6379
kill      : sudo kill `sudo lsof -t -i:6379`
< p > 选项2: < br > 找到之前运行的Redis服务器:

 ps auxx | grep redis-server

通过查找PID(进程ID) - Redis Sever来杀死特定的进程

kill -9 PID

现在用
启动redis服务器

redis-server /path/to/redis.conf

如果你在安装复述,时安装了制作安装(例如ubuntu),那么你可以这样做:

redis-cli shutdown

正如@yojimbo87所指出的:)

Redis有配置参数pidfile(例如/etc/redis.conf - check Redis源代码),例如:

# 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

如果它被设置或可以被设置,可以使用类似这样的方法来代替使用ps + grep来搜索进程id (pid):

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

如果需要,可以这样创建Redis停止脚本(改编自默认redis 5.0 init。D脚本在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

停止redis服务

sudo service redis-server stop

并检查其使用状态

sudo service redis-server status

你可以试试下面的代码:

sudo kill -9 $(ps aux | grep 'redis' | awk '{print $2}')

我建议禁用Redis-server,它可以防止计算机重启时自动启动,对使用docker之类的工具非常有用。

步骤1:停止redis-server

sudo service redis-server stop

步骤2:关闭redis-server

sudo systemctl disable redis-server

如果你需要redis,你可以这样启动:

sudo service redis-server start

如果通过snap安装Redis:

sudo snap stop redis.server

要优雅地使用密码关闭特定实例,而不诉诸于强制kill命令,请使用:

redis-cli -p <port> -a <pass> shutdown

root@machine:~# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       105  0.1  0.0  60552 10772 ?        Ssl  23:27   0:02 redis-server 127.0.0.1:10002
root       111  0.1  0.0  60552 10900 ?        Ssl  23:28   0:02 redis-server 127.0.0.1:10003
root       117  0.1  0.0  60552 10872 ?        Ssl  23:28   0:02 redis-server 127.0.0.1:10004


root@machine:~# redis-cli -p 10002 -a mypassword shutdown
Warning: Using a password with '-a' or '-u' option on the command line interface may not be safe.


root@machine:~# ps aux
USER       PID %CPU %MEM    VSZ   RSS TTY      STAT START   TIME COMMAND
root       111  0.1  0.0  60552 10900 ?        Ssl  23:28   0:02 redis-server 127.0.0.1:10003
root       117  0.1  0.0  60552 10872 ?        Ssl  23:28   0:02 redis-server 127.0.0.1:10004


root@machine:~#

如果有大量的实例,就需要编写一个批处理脚本来循环遍历所有实例,以便主关机。

redis的服务名是redis-server,所以你可以用这个命令禁用和停止redis:

sudo systemctl disable redis-server
sudo systemctl stop redis-server