我在使用 memcached 时遇到了一些非常奇怪和烦人的问题。我在 linode 实例上运行 ubuntu server 10.04lts。我在 django 项目中使用 fabric,fabric 脚本的一部分允许重新启动 memcached 进程。今天我注意到 fabric 输出了一个错误,内容如下
Restarting memcached: start-stop-daemon: warning: failed to kill 8175: No such process
然后我立即通过 ssh 连接到该盒子,开始四处查看,看看这是否只是一次性问题,还是某种与结构有关的问题。因此我直接在盒子上运行命令
Restarting memcached: start-stop-daemon: warning: failed to kill 8186: No such process
相同的交易不同的进程 ID。然后我尝试 telnet 到 memcached,它工作正常。进程 ID 现在是 8123。快速 ps aux | grep memcached 命令显示该进程正在该 pid 下运行。
www-data 7259 0.0 0.1 45972 772 ? Ssl 16:38 0:00 memcached -d -u www-data -p 11211 -m 64
www-data 8123 0.0 2.4 57220 12260 ? Ssl 17:02 0:00 memcached -d -u www-data -p 11211 -m 64
所以我想也许在通过 apt 安装 memcached 时发生了一些我之前没有注意到的事情,所以我删除了 memcached 并重新安装,没有任何错误。然后我使用以下选项运行了 memcached
sudo memcached -d -u www-data -p 11211 -m 64
真正奇怪的是,如果我停止 memcached 并重新启动它,我可以运行 /etc/init.d/memcached restart 一次而没有任何错误,之后关于未找到 pid 的相同警告会再次发生。
我现在已经束手无策了,请帮忙 :/!!
答案1
强制终止正在运行的进程,
sudo kill -9 {进程ID}
确保没有任何东西正在运行,如果 /var/run/memcached.pid 存在,也请 rm :p
然后尝试 sudo /etc/init.d/memcached start
检查 /var/run/memcached.pid 中的进程 ID 是否与 ps aux | grep memcache 中的进程 ID 匹配。如果匹配,则运行 sudo /etc/init.d/memcachd {start/stop/restart} 应该没问题
一个新贵脚本也很酷:)
克里斯
答案2
既然您正在使用 Lucid,您是否考虑过在 Upstart 中设置 memcached?
类似这样的事情应该可以工作:
$ cat /etc/init/memcached.conf
# memcached - in-memory cache
#
description "memcached"
start on (local-filesystems and started networking)
stop on runlevel [!2345]
respawn
pre-start script
test -x /usr/bin/memcached || { stop; exit 0; }
end script
exec /usr/bin/memcached -d -u www-data -p 11211 -m 64
在这种情况下,Upstart 将负责保持 memcached 处于活动状态。
答案3
这实际上已被报告为此处的错误:
https://bugs.launchpad.net/ubuntu/+source/memcached/+bug/795673
我刚刚在 Ubuntu 开发版中修复了这个问题(目前很精确)。修复很小,如果时间允许,应该也可以移植到 10.04。