3

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?

2 Answers 2

3

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 &');
Sign up to request clarification or add additional context in comments.

Comments

0

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.

2 Comments

Thank you @dmnptr, this may work but is a bit complicated for the usage I need. I found a workaround using exec, will post the answer
However, this deserves a +1 :)

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.