Desidero richiamare in modo asincrono un comando da un controller in Symfony2.Chiamare in modo asincrono un comando in Symfony2
Finora ho trovato la seguente soluzione:
$cmd = $this->get('kernel')->getRootDir().'/console '.(new MLCJobWorkerCommand)->getName().' '.$job->getId().' 2>&1 > /dev/null';
$process = new Process($cmd);
$process->start();
C'è un modo migliore per ottenere questo risultato?
Edit:
ho bisogno del processo per l'esecuzione in background e il controller per tornare subito dopo è iniziato il primo. Ho provato:
$cmd = $this->get('kernel')->getRootDir().'/console '
.(new MLCJobWorkerCommand)->getName()
.' '.$job->getId().' 2>&1 > /dev/null & echo \$!';
$process = new Process($cmd);
$process->mustRun();
$params["processid"] = $process->getOutput();
ma il controller non restituisce una risposta fino al termine del processo.
Il problema è che il nuovo processo si fermerà non appena il processo padre viene arrestato pure, che è una limitazione in PHP. Una soluzione migliore potrebbe essere l'uso di un sistema di accodamento come RabbitMQ. – Gerry
Sembra magnifico, farò un tentativo. In passato ero solito avviare un processo in background in PHP nel modo indicato dalla mia modifica ma il Controller sembra bloccarsi qui. Questo è legato al tuo commento? – dmb