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。
查看supervisord(http://supervisord.org/)來管理你的php腳本。主管會爲你做流程管理,如果他們死了,在後臺重新生成php腳本。 – Sachin
@Sachin:你應該發表你的評論作爲答案。我只見過PHP腳本與gearman交互,作爲守護進程運行。儘管我們使用專有的過程控制管理系統,但supervisord似乎非常適合管理子進程。 –
@Sachin這正是我所做的。謝謝! – Scott