停止memcached:。 为什么?

我的应用程序似乎有memcached不停止的问题。

我使用PHP,并具有特定的键每小时后过期。 但是这些键和值不再被重新填充。

当我运行:

/etc/init.d/memcached restart 

我得到以下内容:

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

我必须为memcached运行一个killall memcached memcached来停止。 然后我运行重启,一切都很好。

我不确定是什么原因造成这个问题,但我需要memcached每小时重新启动。 我应该在哪里找出是什么原因造成的呢?

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

后来当我试图运行service memcached restart/stop ,停止命令将失败。 在手动处理进程后, service memcached restart/stop按预期工作。

在面值上,我会build议一些使memcached崩溃。 如果memcached在你试图停止时没有运行,它将会失败(因为它已经被停止了)。 所以这可以解释为什么/etc/init.d/memcached stop (或/etc/init.d/memcached restart的第一部分)失败。

但是,接下来你要说,你需要运行killall memcached才能停止。 这会对我提出一个问题,就是你的初始系统失去了这个过程。 由于我不知道你使用的是什么init系统,所以很难确定。

现在大多数发行版使用SystemD,而且由于与旧SysVinit脚本的向后兼容性导致的问题,我在Debian中遇到了一些边缘案例问题。

看看你用来控制你的服务的命令,你直接调用了SysVinit脚本,所以我会假定你使用的是SysVinit,或者是具有SysVinit兼容性的SystemD。

如果你没有任何SystemD,那么你的initscript和/或memcachedconfiguration几乎肯定是有问题的。

如果你有SystemD,那么很可能是你的initscript和SystemD之间的一些通信问题(也可能还有memcachedconfiguration问题)。 国际海事组织,那里的最佳path是编写一个适当的SystemD服务文件,并直接使用SystemD命令; 即systemctl COMMAND SERVICE_NAME.service 。 他们超级容易写,谷歌会帮助你(尝试像“如何编写systemd服务文件”)