2012-03-26 102 views
2

我有vps托管与centos。在这个服务器上有Apache,PHP,MySql。 我安装了memcached。 有时(3-4天内)memcached停止 - 我不知道为什么,在日志文件中缺少必要的信息。如何重新启动memcached从PHP

我发现的解决方案 - 每10分钟运行的cron,验证启动或没有Memcached的(通过命令memcached的工具),memcached的时候就已经坠毁 - 我发送电子邮件,并通过服务器命令行启动memv =缓存

但我会开始memcached自动,但我不能这样做。

我尝试了命令

system("/etc/init.d/memcached start"); 
exec("service memcached start"); 
system("service memcached start"); 

,但我还没有结果。

+0

memcached no goode!根据php用户或chnge php usr为root工作吧! – DataHerder 2013-06-06 20:33:12

回答

0

在杀死和启动memcached之前,您应该使用sudo使php升级到root,否则您将获得权限。

P.S.尝试检查为什么memcached崩溃,而不是重新启动它!

+0

我通过visudo改变了sudoers,但是我有同样的结果。 我不喜欢那种正确的方式是找到导致memcached崩溃的原因,但我的日志文件是空的。 下面是分布式缓存配置 PORT = “11211” USER = “分布式缓存” MAXCONN = “2048” CACHESIZE = “1000” OPTIONS = “” LOGFILE = “/无功/日志/ memcached.log” gsgsd – user1293332 2012-03-26 16:33:56

-1

您可能需要使用sudo。运行apache的用户不允许运行init脚本本身。

system("sudo /etc/init.d/memcached start"); 

可能会让apache用户使用sudo。这是通过visudo命令完成的。 http://www.gratisoft.us/sudo/visudo.man.html

但说实话,更好的办法是使用像monit这样的东西来自动化'看门狗'角色。它为它设计。 http://mmonit.com/monit/

+0

我通过visudo改变了sudoers,但是我有同样的结果。 – user1293332 2012-03-26 16:12:06

+0

它不适合我也可能是safe_mode是,我需要检查,虽然。 – Musa 2014-01-31 22:52:42

4

我想指出的是,为这样的事情创建实际的cronjob要安全得多。

请阅读更多关于这里的exec()功能:http://php.net/manual/en/function.exec.php

此外,如果safe_mode是,你将无法在您的safe_mode_exec_dir之外执行命令。这些设置在php.ini或自定义php配置中。

正如另一位回答者已经指出的那样,最好隔离事故原因而不是重复启动它。当memcached崩溃时,你会得到什么样的错误?显然你有一些知道它已经崩溃的方法,否则你不会问这个问题。最明显的答案可能是缓存已经满了,而且你的脚本太难/经常为了分页。