9

How can I run a command (app/console execute:my:command) in a service via new Process?

I try this:

use Symfony\Component\Process\Process;
use Symfony\Component\Process\Exception\ProcessFailedException;

$process = new Process(
    'app/console execute:my:command'
);
$process->start();

But nothing happens ... If I call it manually via terminal it works:

app/console execute:my:command

What am I doing wrong?

EDIT - Solution: We need to write the whole path. In my case:

($this->kernelRootDir is : %kernel.root_dir%)
$processString = sprintf(
    'php %s/../app/console %s %s',
    $this->kernelRootDir,
    self::MY_COMMAND,
    $myArgument
);

$process = new Process($processString);
$process->start();

if (!$process->isSuccessful()) {
    throw new ProcessFailedException($process);
}
1
  • Have you tried to add path to PHP cli behind app/console ? Commented Mar 23, 2017 at 10:00

2 Answers 2

12

This is pretty much all you need to do really. I always set the working directory and assume this is needed so that the Symfony command is run from the root of the project

$process = new Process(
    'app/console execute:my:command'
);
$process->setWorkingDirectory(getcwd() . "../");

$process->start();

For debugging purposes I generally set

$process->setOptions(['suppress_errors' => false]);

as well

Sign up to request clarification or add additional context in comments.

Comments

1

I can't get the setWorkingDirectory function to work properly on Windows...

The fromShellCommandline function works better for me on Windows with Symfony >= 4.4:

$cmd = sprintf('php %s/bin/console %s', 
    $this->getParameter('kernel.project_dir'), 
    'app:my:command'
);

Process::fromShellCommandline($cmd)->run();

Hope this will help someone else!

Comments

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.