【问题标题】:How can I stop redis-server?如何停止 redis 服务器?
【发布时间】:2011-10-18 03:08:56
【问题描述】:

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

Opening port: bind: Address already in use

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

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

我的操作系统是 Ubuntu 10.04。

【问题讨论】:

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

标签: database ubuntu redis


【解决方案1】:

要么连接到节点实例并使用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
【解决方案2】:

一个更干净,更可靠的方法是进入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,只需在提示中按原样输入即可)。
【解决方案3】:

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 成功了。
【解决方案4】:

对于 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 services 来处理默认设置的启动和停止。如果您需要更多控制权,那么还有其他选择。
  • 这是最佳答案,因为它适用于所有 linux 版本和 mac,包括使用 apt、yum、brew 或下载安装的版本。他们是否有暴发户、init 或 system d 脚本。谢谢
  • 我喜欢别名的名字 :) 酷!
  • 如果我想重启而不是关闭@RayHunter该怎么办
【解决方案5】:

以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 做同样的事情,都去。
【解决方案6】:

在 CLI 中键入 SHUTDOWN

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

【讨论】:

    【解决方案7】:

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

    【讨论】:

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

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

    希望对你有帮助

    【讨论】:

      【解决方案9】:

      另一种可能是:

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

      适用于 *NIX 和 OSX

      【讨论】:

      • @JoenasE,不,这不应该是 IMO 接受的答案。让操作系统杀死一个正在运行的进程会忽略应用程序可能在内存中有一些数据尚未保存到更持久存储的情况。 通过应用程序提供的方法关闭应用程序是更好的选择。
      【解决方案10】:

      MacOSX - 成功了 :)

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

      ps auxx | grep redis-server
      

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

      kill -9 PID
      

      【讨论】:

        【解决方案11】:

        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
        

        【讨论】:

          【解决方案12】:

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

          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
          

          很高兴。

          【讨论】:

            【解决方案13】:

            另一种方式可能是:

            brew services stop redis
            

            【讨论】:

            • 为此+10,它在mac上无需道歉!这也有效 ™brew services start redis™ ¢brew services restart redis ¢
            【解决方案14】:

            如果您在安装 redis 时执行了 ma​​ke install(例如 ubuntu),那么您可以:

            redis-cli shutdown
            

            正如 @yojimbo87 所指出的 :)

            【讨论】:

              【解决方案15】:

              我建议禁用 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
              

              【讨论】:

                【解决方案16】:

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

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

                上面的命令会给你 pid。

                杀死&lt;pid&gt;;

                这将关闭您的服务器。

                【讨论】:

                  【解决方案17】:

                  以下在 MAC 上对我有用

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

                  【讨论】:

                    【解决方案18】:

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

                    选项 1:
                    杀死端口上的进程:

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

                    选项 2:
                    找到之前运行的 Redis 服务器:

                     ps auxx | grep redis-server
                    

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

                    kill -9 PID
                    

                    现在用

                    启动你的 redis 服务器
                    redis-server /path/to/redis.conf 
                    

                    【讨论】:

                      【解决方案19】:

                      在我的情况下是:

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

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

                      sudo updatedb
                      locate redis
                      

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

                      【讨论】:

                        【解决方案20】:

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

                        【讨论】:

                          【解决方案21】:

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

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

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

                          【讨论】:

                            【解决方案22】:

                            以下命令适用于 Ubuntu 服务器

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

                            【讨论】:

                              【解决方案23】:

                              如果 Redis 是通过 snap 安装的:

                              sudo snap stop redis.server
                              

                              【讨论】:

                                【解决方案24】:

                                在 MacOSX 上,

                                这对我有用

                                /etc/init.d/redis restart
                                
                                /etc/init.d/redis stop
                                
                                /etc/init.d/redis start
                                

                                【讨论】:

                                  【解决方案25】:

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

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

                                  【讨论】:

                                    【解决方案26】:

                                    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
                                    

                                    【讨论】:

                                      【解决方案27】:

                                      停止redis服务器

                                      sudo service redis-server stop
                                      

                                      并使用检查它的状态

                                      sudo service redis-server status
                                      

                                      【讨论】:

                                        【解决方案28】:

                                        你可以试试这个代码:

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

                                        【讨论】:

                                          猜你喜欢
                                          • 1970-01-01
                                          • 1970-01-01
                                          • 2014-12-15
                                          • 2012-02-27
                                          • 2017-06-14
                                          • 2014-01-04
                                          • 2021-08-09
                                          • 2020-02-25
                                          • 2013-01-15
                                          相关资源
                                          最近更新 更多