2012-06-29 45 views
1

我的web應用程序的一部分是一個後臺腳本,它從一個beanstalkd服務器進行輪詢並處理數據。不使用pcntl_fork的PHP簡單守護進程

該腳本需要連續運行(如守護進程)。如果它崩潰,需要重新啓動。它也不能啓動兩次(更精確地說運行兩次)。

由於我想簡化部署和開發過程,我想避免使用pcntl_fork。它在Windows上不可用,它需要在Mac上重新編譯PHP,有時在Linux上也是如此...

我可以簡單地使用bash腳本在後臺啓動PHP腳本嗎?

# verify that the script is not already running 
... 

/usr/bin/php myScript.php & 

如果我執行這個批次的crontab每隔一小時左右,我的過程中應不斷地運行,並且如果它崩潰的最大一小時內重新啓動?

回答

0

假設你控制腳本運行的服務器,Supervisor可能是一個很好的解決方案。

這是一個用Python編寫的進程控制守護進程。您可以將其配置爲啓動您的PHP腳本並保持運行。 PHP腳本本身不需要做任何特殊的事情。沒有分叉,沒有手動過程控制,什麼也沒有。

另一方面,您也表示擔心pcntl_fork在Windows上不可用。如果你真的在Windows上運行這個東西,Supervisor不會爲你工作,因爲它不適合Windows。請記住,Windows對Unix風格的守護進程並不友好,因爲它想要將守護進程作爲服務進行控制。雖然that's possible,它不完全是一個簡單或優雅的解決方案。

+0

偉大的解決方案。關於Windows(或任何開發環境),最主要的是能夠運行腳本。這不是一個大問題,如果它不作爲deamon運行。 pcntl_fork會阻止腳本啓動,所以這是主要問題。 –

+0

而在這種情況下,因爲腳本只需要完全不加修改地運行,所以主管工作得很好。 – Charles