【问题标题】:How to stop a redis server that was started with --daemonize yes如何停止使用 --daemonize 启动的 redis 服务器是
【发布时间】:2018-03-13 05:59:04
【问题描述】:

我正在尝试杀死一个以 --daemonize yes 启动的 redis 服务器

我觉得这应该很容易,但我无法根据标准方法成功杀死它。我正在使用通过以下说明安装的 Redis 3.2:https://www.hugeserver.com/kb/install-redis-debian-ubuntu/

$ redis-server --daemonize yes 
1550:C 13 Mar 05:54:55.436 # oO0OoO0OoO0Oo Redis is starting oO0OoO0OoO0Oo
1550:C 13 Mar 05:54:55.437 # Redis version=4.0.8, bits=64, commit=00000000, modified=0, pid=1550, just started
1550:C 13 Mar 05:54:55.437 # Configuration loaded
$ kill 1550
-bash: kill: (1550) - No such process
$ kill -9 1550
-bash: kill: (1550) - No such process
$ killall redis-server
redis-server(1181): Operation not permitted
redis-server: no process found
$ /etc/init.d/redis-server stop
[....] Stopping redis-server (via systemctl): redis-server.service==== AUTHENTICATING FOR org.freedesktop.systemd1.manage-units ===
Authentication is required to stop 'redis-server.service'.
Authenticating as: Ubuntu (ubuntu)
Password: 

为什么我需要输入密码才能阻止它?我启动它时从未设置过密码。为什么不杀死工作?即使我 sudo 它,它也会在之后再次重新启动。

-------------------编辑-------

附加信息。对进程 ID 使用 kill 命令不起作用。我必须使用 sudo kill 但随后它会返回另一个进程 ID,就好像某些东西重新启动它一样。我刚刚杀了它 3 次,它又带着第四个 processid 回来了——

--------- 感谢@Kevin Law 的解决方案 ----------

我需要终止守护服务,然后终止进程。不只是一个或另一个......

ubuntu@ip-MyIPAddress:~/Relayer$ ps -ef | grep redis-server
ubuntu    2381     1  0 18:39 ?        00:00:00 redis-server *:6379
ubuntu    2386  1358  0 18:39 pts/0    00:00:00 grep --color=auto redis-server
ubuntu@ip-MyIPAddress:~/Relayer$ sudo service redis-server stop
ubuntu@ip-MyIPAddress:~/Relayer$ ps -ef | grep redis-server
ubuntu    2381     1  0 18:39 ?        00:00:00 redis-server *:6379
ubuntu    2418  1358  0 18:39 pts/0    00:00:00 grep --color=auto redis-server
ubuntu@ip-MyIPAddress:~/Relayer$ kill 2381
ubuntu@ip-MyIPAddress:~/Relayer$ ps -ef | grep redis-server
ubuntu    2420  1358  0 18:39 pts/0    00:00:00 grep --color=auto redis-server
ubuntu@ip-MyIPAddress:~/Relayer$ 

【问题讨论】:

  • 运行TOP命令并获取redis进程的进程ID然后尝试杀死它。
  • @BhushanPatil 它似乎不起作用。我必须使用 sudo kill 但随后它会返回另一个 processid,就好像某些东西重新启动它一样。我刚刚杀了它 3 次,它又带着第四个 processid 回来了
  • 检查该redis进程是否有ps -o ppid= {pid}的父进程,如果有则杀死该父进程。
  • 尝试使用 ps -o ppid=,我做对了吗?请参阅上面的编辑。
  • 那也行不通。杀死它,但它重新启动。我根据上面的pstree结果使用了父进程ID。

标签: node.js ubuntu amazon-ec2 redis


【解决方案1】:

在我的测试中,您的问题有三个选项。

  1. 通过停止 redis 服务来停止 redis。在大多数情况下,这是推荐的方式。
sudo systemctl stop redis-server

sudo service redis-server stop
  1. 连接到这个 redis-server 并通过 redis-cli 关闭它。
redis-cli

连接redis后,发出shutdown关闭redis-server

shutdown
  1. 直接杀死redis-server进程:
ps -ef | grep redis-server
kill -9 (pid)

【讨论】:

  • systemctl stop redis-server 要求我输入密码。但是我没有设置密码,那我应该输入什么? service redis-server stop 做同样的事情
  • 在你的命令前加上sudosystemd 没有足够权限的命令会要求输入密码。
  • 密码是多少?这是一个没有设置密码的全新 EC2 实例...
  • 如果你有一个新的EC2实例,只是在systemctl前加上sudo,根据默认设置,你不需要输入密码。
  • 我已经更新了我的答案,并且 2 个选项都已经在我的机器上测试过了。
【解决方案2】:

尝试使用以下命令查找正在运行的 redis-server 实例,然后尝试使用 kill 命令杀死确切的实例。

ps -aef | grep redis 

【讨论】:

  • 这似乎不起作用。请参阅我上面的编辑。我杀死它后它会自行重启。
  • 你能检查是否有任何父进程正在执行相同的尝试 pkill 进程 相同的,其中进程应该是名称而不是 pid。
  • 那也没用。结果相同。它尝试使用 pstree 查看父进程,但似乎我要杀死的是父进程。
  • 哦!会检查我是否得到同样的东西会回复你。
猜你喜欢
  • 2011-10-18
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-14
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多