ChatGPT解决这个技术问题 Extra ChatGPT

如何停止 redis 服务器?

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

Opening port: bind: Address already in use

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

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

我的操作系统是 Ubuntu 10.04。

您使用的是哪个操作系统和发行版?
女士们先生们,如果您没有通过包管理器安装 redis,而是从源代码安装它,那么它可能无法在 ubuntu 上与 systemv 或 upstart 或 systemd 一起使用。因此,默认情况下所选答案将不起作用。第二个答案没有标记为正确,似乎更可靠。
提示:可以通过 redis-cli ping 测试 Redis 服务器是否正在运行。正在运行的 Redis 服务器将响应 PONG
好问题朋友

S
Shreyas

连接到节点实例并使用 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

只有以这种方式设置 redis 才能做到这一点。 Kevin McTigue 的答案适用于最少的设置。
在 OS X 上,您可能必须使用 launchctl 来执行此操作,而在其他系统上,则使用 systemctlservice
在某些机器上 sudo /etc/init.d/redis stop 会起作用
在现代 Ubuntu 上,我只使用 service redis-server stopservice redis-server start,在使用 apt-get install redis-server 安装它之后。
这仅在您将 redis-server 作为服务运行时才有效。如果它作为独立的可执行文件运行,那么您将需要显式停止该进程。以下是我用来停止进程的步骤: pkill redis-server on a linux box
K
Kevin McTigue

一个更干净、更可靠的方法是进入 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...

或者甚至不启动 redis-cli。只需通过 redis-cli shutdown 从命令行发送它。 (您可以发送任何这样的命令,例如 redis-cli set cat dog; redis-cli get cat
@jessebuesking 评论的唯一警告是,如果您设置了密码保护,redis-cli set cat dog; redis-cli get cat 会更改为 redis-cli -a mypassword set cat dog; redis-cli -a mypassword get cat,这在执行几个命令后可能会很烦人。
@glarrain 为避免冗余可以做的一件事是为当前的 bash 会话设置一个别名,例如 alias redis-cli="redis-cli -a mypassword"。这样,您就可以像我原来的评论一样拨打电话,而无需在每次使用时重新提供密码。
@jessebuesking 很有创意!不会想到解决方案。出于某种原因,我有点害怕将密码放在配置文件中
@glarrain 不相信我的话,但我认为这样做只会将它存储在当前会话的内存中(也不要将它添加到您的 bashrc 或 bash_profile,只需从提示中按原样输入)。
S
SimplGy

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


是的,接受的答案仅适用于以所述方式将 Redis 设置为服务的 Linux 系统
这也适用于 Windows。 redis-cli.exe shutdown
正如我上面提到的,很遗憾这种(相当明显的)方法很难找到。我预计 redis-cli --help 可以涵盖这种情况。
我在 Ubuntu 上失败了:“(错误)ERR 未知命令 shutdown,args 以:开头”
我在 Ubuntu 上,redis-cli shutdown nosave 成功了。
R
Ray Hunter

对于 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 服务并在登录和启动时添加它。


如果您使用自制软件安装了 redis,brew services stop redis 也可以! :)
我建议现在使用 brew 服务来处理默认值的启动和停止。如果您需要更多控制,那么还有其他选择。
这是最好的答案,因为它适用于所有 linux 风格和 mac,包括使用 apt、yum、brew 或下载安装的那些。他们是否有暴发户、init 或 system d 脚本。谢谢
我喜欢别名的名称 :) 酷!
如果我想重新启动而不是关闭我该怎么办@RayHunter
d
denny

使用 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

我想知道如果默认配置,这对于新的 Redis 版本是否仍然有效。发出 service --status-all 不会显示 redis,因此任何 service 命令都会对 redis-server 失败。但 redis 确实显示在 ps -ef 中。我只是找不到任何相关文件。
在 Ubuntu 18.04 sudo service redis start/stop/status 上看起来也一样,两者都可以。
M
Martin Thoma

在 CLI 中键入 SHUTDOWN

或者

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


c
ciembor

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


这很棒,适用于 mac/unix。 (Mac 测试,unix 认证)
硬杀数据库服务器是个坏主意。总是更喜欢适当的关机,或者至少是 kill -15 而不是 kill -9。
@ZsoltSzilagy,您应该提供一个链接或某种解释,为什么这是一个坏主意。就像redis做延迟写入一样,这样内存中还是会有未提交的数据。
@notbad.jpeg,当然,您也可以将计算机放在地板上。如果表足够高,这也应该停止服务器。我是否需要一个链接或解释一下为什么这是一个坏主意?
使用这种方法,您无需考虑 redis 数据库状态。您正在使用操作系统功能来关闭应用程序,而不是使用应用程序本身或守护程序,后者可能也在使用应用程序功能。此解决方案就像拔掉电缆以关闭电视。
A
App Work

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

希望能帮助到你


s
smace

另一种方法可能是:

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

适用于 *NIX 和 OSX


@JoenasE,不,这不应该是国际海事组织接受的答案。让操作系统杀死一个正在运行的进程会忽略应用程序可能在内存中有一些数据尚未保存到更持久存储的情况。通过应用程序提供的方法关闭应用程序最好是更好的选择。
K
Karthekeyan Devanand

MacOSX - 它工作:)

第一步:找到之前运行的 Redis 服务器

ps auxx | grep redis-server

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

kill -9 PID

B
Bedram Tamang

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

步骤 1:停止 redis-server

sudo service redis-server stop

第 2 步:禁用 redis 服务器

sudo systemctl disable redis-server

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

sudo service redis-server start

g
gia huy

如果您在安装 redis 时确实进行了安装(例如 ubuntu),那么您可以执行以下操作:

redis-cli shutdown

正如@yojimbo87 指出的那样:)


A
Adobe

系统,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

S
SerKnight

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

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

很好走。


I
Ihor Pavlyk

另一种方法可能是:

brew services stop redis

为此+10,它在mac上无需道歉!这也有效 ™brew services start redis™ ¢brew services restart redis¢
c
cptjack

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

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

上面的命令会给你 pid。

杀死<pid>

这将关闭您的服务器。


M
Mahesh Hegde

以下为我在 MAC 上工作

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

A
AATHITH RAJENDRAN

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

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

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

选项2:找到之前运行的Redis Server:

 ps auxx | grep redis-server

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

kill -9 PID

现在启动你的redis服务器

redis-server /path/to/redis.conf 

j
joan16v

就我而言,它是:

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

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

sudo updatedb
locate redis

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


W
Wladek Surala

如果您在 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

y
ysth

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

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

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


e
efkan

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

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

M
Madhusudan chowdary

停止 redis 服务器

sudo service redis-server stop

并使用检查它的状态

sudo service redis-server status

Á
Ákos Kovács

如果 Redis 是通过 snap 安装的:

sudo snap stop redis.server

T
Taku

在 MacOSX 上,

这对我有用

/etc/init.d/redis restart

/etc/init.d/redis stop

/etc/init.d/redis start

L
Lauren Marie Lahm

检查 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 权限,check this out。但问题是我以我的部署用户身份执行重启,上面的权限是 rx,不允许我的用户写入 PIDFile 目录。

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


R
Robert Lujo

Redis 有配置参数 pidfile(例如 /etc/redis.conf - 检查 redis source code),例如:

# 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 停止脚本(改编 default redis 5.0 init.d script in redis source code):

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

i
iminiki

你可以试试这段代码:

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