memcached 已死,但子系统已锁定

Posted

技术标签:

【中文标题】memcached 已死,但子系统已锁定【英文标题】:memcached dead but subsys locked 【发布时间】:2014-04-08 01:57:30 【问题描述】:

服务 memcached 重启产生: 停止 memcached:[失败] 启动 memcached:[好的]

服务 memcached 状态产生:

/var/lock/subsys/ 中的 ls 显示了一个名为 memcached 的文件

/var/run/ 中的 ls 显示没有名为 memcached 的 pid 文件 这里还有另一个名为 memcached 的文件夹,但该文件夹中没有任何内容。

rm /var/lock/subsys/memcached 摆脱 memcached 锁定文件

服务重启 memcached 的结果: 停止 memcached:[失败] 启动 memcached:[好的]

服务 memcached 状态产生:

我做错了什么?

编辑:我想补充一点,我在发布之前已经搜索过这个,我要么已经在执行所述帖子中列出的步骤,要么该帖子已有多年历史。

【问题讨论】:

我最终重新启动了 linux 以使其恢复工作状态,但如果能知道一种更温和的方法来让它再次工作,那就太好了 【参考方案1】:

是否有另一个进程绑定到 TCP/11211?

也许您尝试以非特权用户身份启动 memcached 服务,但失败:

$ service memcached start
Starting memcached:                                        [  OK  ]
touch: cannot touch ‘/var/lock/subsys/memcached’: Permission denied

之后,service memcached status错误地报告 memcached 没有运行:

$ service memcached status
memcached dead but subsys locked

但它是,并且它绑定到端口 11211,为了检查这一点,您可以使用:

$ fuser -n tcp 11211
11211/tcp:            4439

或者:

$ pgrep -l memcached
4439 memcached

Memcached 将无法启动,因为它无法绑定到 11211,因为正在运行的实例已经绑定到它。不幸的是,有些系统(我在看你,CENTOS)可能不会在/var/log/messages/var/log/syslog 留下任何有用的提示。这就是为什么之前对这个问题的许多摆弄绑定地址的答案看起来像是解决了问题。

你如何解决它?

既然service stop memcached 不起作用,你必须杀死它:

$ pkill memcached

或者这个(其中 4439 是您在上一步中找到的 pid):

$ kill 4439

然后你就可以正确地使用 sudo:

$ sudo service memcached start
Starting memcached:                                        [  OK  ]
$ service memcached status
memcached (pid 6643) is running... 

【讨论】:

【参考方案2】:

通过在终端输入以下命令解决了这个问题:

1) su(成为 root)。

2) killall -9 memcached(杀死memcached)。

3) /etc/init.d/memcached start(手动启动memcached)。

或者:3) 服务 memcached 启动。

【讨论】:

【参考方案3】:

检查 /etc/sysconfig/memcached 确保 OPTIONS="-l 127.0.0.1" 正确

【讨论】:

【参考方案4】:

从 OPTION 中删除 -l。

例如,而不是 OPTION="-l 2.2.2.2" 尝试使用 OPTION="2.2.2.2"

这对我有用。

【讨论】:

【参考方案5】:

要解决此问题,请以 root 身份运行以下脚本 rm /var/run/memcached/memcached.pid rm /var/lock/subsys/memcached 服务 memcached 启动

【讨论】:

为什么?它有什么作用?有什么参考吗?【参考方案6】:

删除并重新安装 memcached 对我有用:

[acool@acool super-confidential-dir]$ sudo yum remove memcached
...
[acool@acool super-confidential-dir]$ sudo yum install memcached

在执行上述命令并启动它之后,我得到了:

[acool@acool super-confidential-dir]$ sudo service memcached status
memcached dead but pid file exists

当时我杀了它并删除了 pid 文件:

[acool@acool super-confidential-dir]$ sudo killall -s 9 memcached
...
[acool@acool super-confidential-dir]$ sudo rm /var/run/memcached/memcached.pid

最后启动它并检查它的状态:

[acool@acool super-confidential-dir]$ sudo service memcached start
...
[acool@acool super-confidential-dir]$ sudo service memcached status
memcached (pid  13804) is running...

然后我又开心了。

祝你好运。

【讨论】:

【参考方案7】:

在我的情况下,我想通过套接字使用 memcache

OPTIONS="-t 8 -s /run/memcached/memcached.sock -a 0777 -U 0"

从另一个操作系统复制,并得到同样的问题。 然后我意识到我只是忘记了,在我的操作系统中 /run/ 不存在。而已。看看你的路径,哈哈

【讨论】:

以上是关于memcached 已死,但子系统已锁定的主要内容,如果未能解决你的问题,请参考以下文章

你知道Memcached吗?

前端已死?我看未必,但「低代码」已剑指前端程序员

劝人写码,千刀万剐——“前端已死”难道要成真了?

2代3代Vue响应系统一浪更比一浪强,前浪已死?(上)

如何显式锁定已挂载的文件系统?

Linux桌面已死?Ubuntu创始人不同意