Symfony2 - 进程启动symfony2命令

时间:2014-10-21 13:50:57

标签: php symfony asynchronous process symfony-process

我的目标是在后台启动一些耗时的功能,以避免用户在呈现服务器响应之前等待。

我有一个Symfony项目,我从控制器启动一个异步进程。此过程将启动一个Symfony命令,该命令将调用另一个控制器。

问题是当我使用start()

调用流程时
$process = new Process('/usr/bin/php '.$this->get('kernel')->getRootDir().'/console scopusftpupload ' . escapeshellcmd($params));
$process->start();

然后这个过程没有任何反应,但重定向和其他一些我后来工作的代码。

然而,如果我这样做

$process->run();

然后该过程正常,但我需要等到过程结束才能呈现视图。

知道我做错了吗?

2 个答案:

答案 0 :(得分:3)

我使用exec找到了解决此问题的方法,而不是创建新的Process对象。

exec('/usr/bin/php '.$this->get('kernel')->getRootDir().'/console scopusftpupload ' . escapeshellcmd($params) . ' > /dev/null 2>&1 &');

答案 1 :(得分:0)

我们使用Gearman作业服务器进行异步处理 - http://gearman.org/

有一些软件包可以简化在Symfony项目中使用Gearman的过程。我们使用mmoreram / GearmanBundle - https://github.com/mmoreram/GearmanBundle。基本上,您可以创建可以作为服务的工作者,并将其称为耗时的任务。我们将它用于需要很长时间的数据导入。