Фон Symfony2 Процесс выполняется после завершения скрипта?

Symfomaniacs!

Допустим, у меня есть этот код в моем контроллере:

        for ($i = 0; $i <= 3; $i++)
{
$command = 'php ' . $kernel->getRootDir() . '/console Educa:ExecuteJob '
. $i . ' --env=' . $kernel->getEnvironment();
$logger->addInfo("Executing command: ".$command);
$process = new Process($command);
$process->disableOutput();
$process->start();
}
//sleep(5);
return $this->render(...);

а выполнение ExecuteJob занимает около 5 секунд. Внутри консольной команды у меня есть logger-> addInfo () как в начале, так и в конце скрипта.

Если я раскомментирую спать (5) линии они оба печатают. Если нет, в журнале печатается только начальная строка, что должно означать, что когда скрипты контроллера заканчиваются, он останавливает все процессы, я ошибся?

Есть ли способ обойти это? Я открыт, чтобы изменить дизайн, я просто хочу выполнить фоновую работу, не дожидаясь отображения страницы (даже не актуально для этой страницы)

PS: я ищу способ запуска фоновых задач, которые играет хорошо с Symfony2, а не странные php хаки или же рабочие места cron. Я знаю о них. Я тоже не хочу настраивать MQ очередь. Это отчасти излишне из-за того, что я пытаюсь.

2

Решение

В вашей ситуации идеальным решением будет использование Событие kernel.terminate, он срабатывает после того, как ответ передается клиенту, поэтому вы можете выполнять там тяжелые операции.

1

Другие решения

Вам нужно что-то вроде этого https://github.com/schmittjoh/JMSJobQueueBundle но вам нужно будет настроить cron тоже

0

использование & в команду, чтобы отправить его в фоновом режиме, как это

$command = 'php ' . $kernel->getRootDir() . '/console Educa:ExecuteJob &'
-1
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector