【问题标题】:Launching node from php seems to keep php running?从 php 启动节点似乎保持 php 运行?
【发布时间】:2017-10-26 00:28:15
【问题描述】:

所以一开始我正在构建一个与网站前端一起工作的 NodeJS 应用程序。这是构建的,我想要的是通过 PHP 启动它。因此,您可以单击保存,然后在需要时启动它。

该应用程序是一个 websocket 服务器,将侦听 websocket 并处理来自客户端(我网站的前端)的数据/命令。

现在我用来启动它的代码如下:

$command = '/usr/local/bin/node main.js & echo $!';
$processid = shell_exec($command);

但由于某种原因,当我在前端单击保存时,它只是挂起并继续加载......但页面上什么也没显示?它创建了我可以看到的过程:

lsof -i tcp:8000

只有当我终止节点正在运行的进程时,页面才会停止加载...

我正在使用:

kill -9 <pid>

杀死它。所以我有点迷茫为什么它没有在后台运行它然后完成 PHP 脚本......它只是挂在上面?

任何帮助将不胜感激。

请注意,这一切都可以从命令行运行,因此该文件是一个单独的启动器类,如果我通过 php 运行它并添加一些代码来执行它可以工作的任务,只有当我调用它时我还有什么问题吗?

如果有帮助的话;该网站使用的框架是 Joomla 3.x,在此先感谢。

我在 MacBook Air El Capitan 上, 还需要在 Linux CentOS 上工作

【问题讨论】:

    标签: php node.js websocket frontend shell-exec


    【解决方案1】:

    使用这个。它将抑制 STDOUT 和 STDERR 并立即返回,而无需等待命令完成。

    $command = '/usr/local/bin/node main.js &gt; /dev/null 2&gt;&amp;1';

    【讨论】:

    • 您好,谢谢您,我尝试使用 nohup,但出现以下错误:nohup: can't detach from console: Inappropriate ioctl for device
    • 您好,我刚刚使用了它并且它工作了,结果我没有正确管理标准输出,所以它让 PHP 挂起。非常感谢!
    猜你喜欢
    • 2015-05-12
    • 1970-01-01
    • 2020-05-20
    • 1970-01-01
    • 1970-01-01
    • 2018-09-25
    • 2017-09-07
    • 2017-07-16
    • 1970-01-01
    相关资源
    最近更新 更多