Php 在Symfony2中访问后台进程
我想使用在Symfony2中创建一个后台进程,并在后台运行它,如下所示:Php 在Symfony2中访问后台进程,php,symfony,process,symfony-process,Php,Symfony,Process,Symfony Process,我想使用在Symfony2中创建一个后台进程,并在后台运行它,如下所示: $process = new Process('php myfile.php --option1 --option2'); $process->start(); 我想在这里运行的脚本将不可靠地运行(while(true)或类似的东西),并且应该可以从控制台命令或控制器终止 问题是-如何在Symfony中(例如,从控制器)从与创建时不同的上下文访问此类流程?也就是说,没有原始的流程实例?假设对路由create\u进程
$process = new Process('php myfile.php --option1 --option2');
$process->start();
我想在这里运行的脚本将不可靠地运行(while(true)
或类似的东西),并且应该可以从控制台命令或控制器终止
问题是-如何在Symfony中(例如,从控制器)从与创建时不同的上下文访问此类流程?也就是说,没有原始的流程
实例?假设对路由create\u进程的请求启动该进程,那么对kill\u进程的请求应该会终止该进程。有可能吗
我可以想到的一种方法是序列化进程对象并将其存储在数据库中,但这种解决方案似乎有很多问题。您不应该这样做
PHP是无状态的,每个请求都是完全唯一的
我不知道Symfony进程在内部是如何工作的,但恐怕没有办法杀死通过exec()
,passthru()
等执行的命令
您可以阅读本节并了解它是否有帮助:
如果没有,您可以在启动流程时获取当前时间戳(例如1422971460),并定期检查是否存在名为“kill_1422971460”的文件,一旦存在,就将其删除并结束流程
但我建议您使用另一种编程语言来处理这类过程,因为PHP并不是专门为此而设计的。您还可以点击max\u execution\u time
或apache和fcgi线程之间的超时,这将终止您的进程。它不可靠,也不能很好地为您服务。我使用DaemonizableCommandBundle做过类似的事情:
它有一个EndlessCommand
类,您可以扩展并创建一个在循环中执行某些操作的命令,并且可以随时终止该命令;它确实试图优雅地终止迭代