如何在调用doBackground时注册函数和gearmanworker?

时间:2012-05-09 04:48:08

标签: php gearman

客户端:

<?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

然后它写入文件,但shell只是停留在

[user@server gearman]$ php worker.php 
Starting
Result: tset a si siht

无论如何我可以这样做,当它调用doBackground时,它会在后台运行worker.php文件吗?我还想确保在重新启动gearmand时这项工作,以便在重新启动守护程序时不必运行worker.php。

1 个答案:

答案 0 :(得分:0)

从我的评论中回复:

看看supervisord(supervisord.org)来管理你的php脚本。主管将为您完成流程管理,并在后台重新生成php脚本