2015-02-03 4 views
2

Я хотел бы создать фоновый процесс в Symfony2, используя Process component и запустить его в фоновом режиме, как это:Доступ фоновый процесс в Symfony2

$process = new Process('php myfile.php --option1 --option2'); 
$process->start(); 

Сценарий, который я хочу, чтобы запустить здесь будет работать indefinetely (while (true) или что-то в этом роде) и должно быть возможно убить с помощью команды консоли или контроллера.

Вопрос в том, как я могу получить доступ к такому процессу в Symfony (например, от контроллера) из другого контекста, чем он был создан? То есть - без оригинального экземпляра Process? Скажем, запрос на маршрут create_process запускает процесс, тогда запрос на kill_process должен его убить. Возможно ли это?

Один из способов, о котором я могу думать, - сериализовать объект процесса и хранить его в базе данных, но похоже, что с этим решением может быть много проблем.

ответ

0

Вы не должны этого делать.

PHP stateless, каждый запрос является полностью уникальным.

Я не знаю, как работают Symfony Processes, но AFAIK не может убить команды, выполненные через exec(), passthru() или тому подобное.

Вы можете прочитать этот раздел и выяснить, если это помогает: http://symfony.com/doc/current/components/process.html#process-pid

Если это не вы могли бы еще получить текущую временную метку (например, 1422971460), когда вы начинаете процесс, и периодически проверять на наличие файл «kill_1422971460», и как только он существует, удалите его и завершите процесс.

Но я бы посоветовал вам использовать другой язык программирования для таких процессов, поскольку PHP не предназначен для этого. Также вы можете нажать max_execution_time или таймауты между потоками apache и fcgi, что в конечном итоге приведет к убийству вашего процесса. Это ненадежно, и вам это не поможет.

0

Я сделал что-то вроде этого, используя DaemonizableCommandBundle:

Он имеет EndlessCommand класс, который можно расширить и создать команду, которая делает что-то в цикле, и который вы можете прекратить работу в любое время; он пытается изящно завершить итерацию.

 Смежные вопросы

  • Нет связанных вопросов^_^