【问题标题】:Shutting down Redis关闭 Redis
【发布时间】:2018-08-04 19:19:49
【问题描述】:

我今天在本地计算机上首次启动 Redis,然后在我关闭 Rails 应用程序后关闭了所有终端窗口。一个小时后,我再次启动 Rails 应用程序,并执行以下操作以启动 redis 服务器

redis-server /usr/local/etc/redis.conf

但它告诉我

# Opening port 6379: bind: Address already in use

因此,我认为即使我关闭了 Mac 上的终端窗口,它仍在运行其早期实例。

看着这个页面http://redis.io/commands/shutdown,我试着跑了

SHUTDOWN

在终端窗口中,但我得到了这个响应

SHUTDOWN: NOT super-user

因此我尝试了(即使我没有使用 sudo 来启动它)

sudo SHUTDOWN 

在它询问我的密码后,它输出了这个

usage: shutdown [-] [-h [-u] [-n] | -r [-n] | -s | -k] time [warning-message ...]

但是当我随机运行shutdown -s时它说

 SHUTDOWN: NOT super-user

当我关闭我的应用程序时关闭 Redis 的正确方法是什么?

【问题讨论】:

  • 嘿,我在 15 分钟前不小心对你的问题投了反对票。我刚刚意识到这一点,但我无法撤消它。如果你编辑它,我想我可以撤消它。真的,真的很抱歉。

标签: redis


【解决方案1】:

使用内置的redis客户端:redis-cli shutdown

【讨论】:

  • 应该是最佳答案。
【解决方案2】:

这意味着作为命令发送到 redis,而不是在您的终端上执行。

在这种情况下,您实际上可以只从终端kill redis,因为收到SIGTERM 信号后,它将安排一个 SHUTDOWN 而不是简单地退出。

供参考see the signal handling doc page.

【讨论】:

  • 实际上,运行'kill'给了我这个kill:用法:kill [-s sigspec | -n 符号 | -sigspec] pid | jobspec ... 或 kill -l [sigspec]
  • 您需要提供进程 ID 才能杀死,因此它知道将 SIGTERM 信号发送到哪里。看看这个:unixhelp.ed.ac.uk/CGI/man-cgi?kill
  • 好的,对于任何查看此答案的人,我通过执行 'redis-cli info | 获得了进程 ID grep process_id' 然后运行 ​​'kill 2694'
  • "ps aux | grep redis" 是正常的方式,仅供参考:)
  • 如何告诉 ps 包含列标题?
【解决方案3】:

找出你机器上运行的 Redis 实例的进程 ID...

> ps aux | grep redis

impadmin 23277  0.0  0.0  35044  1976 pts/2    Sl+  14:19   0:00 src/redis-server

...然后运行:

> kill 23277

【讨论】:

  • 我尝试了这种方法,但一直注意到我的redis-server 进程由于某种原因不断更改其 PID...所以每次我运行ps aux | grep redis 时,显示的 PID 都会与上一次运行不同的ps aux | grep redis。最终redis-cli shutdown 是我想要的。
猜你喜欢
  • 2022-11-07
  • 1970-01-01
  • 2012-05-20
  • 2013-07-16
  • 2011-05-05
  • 2022-01-20
  • 2011-08-05
  • 2012-03-02
  • 1970-01-01
相关资源
最近更新 更多