2012-05-09 32 views
0

客戶:如何在doBackground被調用時註冊函數和gearmanworker?

<?php 

$gmclient= new GearmanClient(); 
$gmclient->addServer(); 
$gmclient->doBackground("reverse", "this is a test"); 

echo "done!\n"; 

工人:

<?php 

echo "Starting\n"; 

$gmworker= new GearmanWorker(); 
$gmworker->addServer(); 
$gmworker->addFunction("reverse", "reverse_fn"); 

while($gmworker->work()){} 

function reverse_fn($job) 
{ 

    $result= strrev($job->workload()); 

    $fp = fopen('test.txt', 'a'); 
    fwrite($fp, $result); 
    fclose($fp); 
    echo "Result: $result\n"; 
    return $result; 
} 

?> 

的問題是,當我在客戶端調用沒有任何反應,直到我跑

php worker.php 

然後將其寫入文件,但外殼只是卡在

[[email protected] gearman]$ php worker.php 
Starting 
Result: tset a si siht 

是否有無論如何,我可以使它調用doBackground時,它在後臺運行worker.php文件?我還想確保在gearmand重新啓動時執行此操作,以便在守護程序重新啓動時不必運行worker.php。

+0

查看supervisord(http://supervisord.org/)來管理你的php腳本。主管會爲你做流程管理,如果他們死了,在後臺重新生成php腳本。 – Sachin

+0

@Sachin:你應該發表你的評論作爲答案。我只見過PHP腳本與gearman交互,作爲守護進程運行。儘管我們使用專有的過程控制管理系統,但supervisord似乎非常適合管理子進程。 –

+0

@Sachin這正是我所做的。謝謝! – Scott

回答

0

發佈從我的評論答案:

以管理你的PHP腳本來看看supervisord(supervisord.org)。主管將爲你做進程管理,並在後臺重新生成php腳本

+0

非常感謝! – Scott

相關問題