正在停止 memcached:[失败]。为什么?

正在停止 memcached:[失败]。为什么?

我的应用程序似乎存在 memcached 无法停止的问题。

我使用的是 php,并且有特定的键每小时过期一次。但是这些键和值不再重新填充。

当我跑步时:

/etc/init.d/memcached restart

我得到以下信息:

Stopping memcached:                                        [FAILED]
Starting memcached:                                        [  OK  ]

我必须运行一个killall memcached命令来停止 memcached。然后我运行一个重新启动命令,一切正常。

我不太清楚是什么原因造成的,但我需要 memcached 每小时重启一次。我应该在哪里查找原因?

答案1

对我来说,这是因为我最初是memcached -d手动运行的。

然后当我尝试运行 时service memcached restart/stop,停止命令会失败。手动终止进程后,它service memcached restart/stop按预期工作。

答案2

从表面上看,我认为是某些原因导致 memcached 崩溃。如果 memcached 在您尝试停止时未运行,则它会失败(因为它已停止)。因此,这可以解释为什么/etc/init.d/memcached stop(或 的第一部分/etc/init.d/memcached restart)会失败。

但随后你又说你需要运行killall memcached才能让它停止。在我看来,这说明你的 init 系统丢失了对进程的跟踪。由于我不知道你使用的是什么 init 系统,所以很难确定。

如今大多数发行版都使用 SystemD,而我在使用 Debian 时遇到了一些边缘问题,这是由于与旧 SysVinit 脚本的向后兼容性问题所导致的。

查看您用来控制服务的命令,您直接调用 SysVinit 脚本,因此我假设您使用的是 SysVinit,或者具有 SysVinit 兼容性的 SystemD。

如果您没有任何 SystemD,那么几乎肯定是您的 initscript 和/或 memcached 配置有问题。

如果您确实有 SystemD,那么这可能是由您的 initscript 和 SystemD 之间的一些通信问题引起的(并且可能还存在 memcached 配置问题)。在我看来,最好的方法是编写一个正确的 SystemD 服务文件并直接使用 SystemD 命令;即systemctl COMMAND SERVICE_NAME.service。它们非常容易编写,谷歌会帮助您(尝试“如何编写 systemd 服务文件”)

相关内容