2012-03-26 60 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崩潰時,你會得到什麼樣的錯誤?顯然你有一些知道它已經崩潰的方法,否則你不會問這個問題。最明顯的答案可能是緩存已經滿了,而且你的腳本太難/經常爲了分頁。