Symfony2 - process launching a symfony2 command

江枫思渺然 提交于 2020-01-21 18:46:31

问题


My goal is to launch some time consuming functions in the background to avoid user to wait before the server response is rendered.

I have a Symfony project where I am launching an asynchronous process from a controller. This process will launch a Symfony command that will call another controller.

The problem is when I am calling the process with start()

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

Then nothing happens with the process, but the redirect and some other code that I have later works.

However, if I do

$process->run();

Then the process works fine, but I need to wait until the proceess finished in order to render the view.

Any idea what I am doing wrong?


回答1:


I found a workaround to this problem using exec instaed of creating a new Process object.

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



回答2:


We do our asynchronous processing with Gearman job server - http://gearman.org/

There are bundles that streamlines the use of Gearman in a Symfony project. We use mmoreram/GearmanBundle - https://github.com/mmoreram/GearmanBundle. Basically, you create your worker, which can be a service, and call it for time consuming tasks. We use it for data imports that take long time.



来源:https://stackoverflow.com/questions/26488386/symfony2-process-launching-a-symfony2-command

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!