Доступ к фоновому процессу в Symfony2

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

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

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

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

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

2

Решение

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

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

0

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

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

PHP это без гражданства, каждый запрос абсолютно уникален.

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

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

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

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

0

По вопросам рекламы [email protected]