我的应用程序似乎存在 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 服务文件”)