php – symfony / process – 静默处理而不启动
发布时间:2020-12-13 21:52:37 所属栏目:PHP教程 来源:网络整理
导读:在一个新的symfony2项目(如 here所述的安装)中,我想作为请求的一部分启动一个控制台进程.该应用程序在nginx php-fpm的“标准”ubuntu 14.04框上运行. 考虑一下这个控制器代码: ?phpnamespace AppBundleController;use SymfonyBundleFrameworkBundleCont
在一个新的symfony2项目(如
here所述的安装)中,我想作为请求的一部分启动一个控制台进程.该应用程序在nginx php-fpm的“标准”ubuntu 14.04框上运行.
考虑一下这个控制器代码: <?php namespace AppBundleController; use SymfonyBundleFrameworkBundleControllerController; use SymfonyComponentHttpFoundationJsonResponse; use SymfonyComponentProcessProcess; use SensioBundleFrameworkExtraBundleConfigurationRoute; class CommandController extends Controller { /** * @Route("/command") * @return JsonResponse */ public function commandAction () { $rootDir = $this->get('kernel')->getRootDir(); $env = $this->get('kernel')->getEnvironment(); $commandline = $rootDir . '/console --env=' . $env . ' acme:hello --who jojo' $process = new Process($commandline); $process->start(); return new JsonResponse(array('command' => $commandline)); } } 当我向/ command发出请求时,我得到了我的预期结果并且该过程开始,例如我用htop之类的东西看到了它. 重新启动php5-fpm服务使我能够再次通过请求启动一个进程,所以基本上我需要在每次请求后重新启动整个php服务.所以这可能不是编程问题.但老实说,我还不知道. 有人有线索吗? 感谢和问候, 解决方法
您的流程很可能在它完成工作之前就已经消亡了.这是因为PHP在响应返回给客户端并且连接关闭后将其杀死.
Process :: start()用于start a process asynchronously.您需要wait()才能完成或检查isRunning()是否已完成: $process->start(); $process->wait(function ($type,$buffer) { // do sth while you wait }); 或者,使用Process :: run()而不是Process:start(). 如果要在后台处理某些内容,请使用消息队列. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |