如何从PHP脚本运行Nodejs服务器?

时间:2019-01-17 19:59:58

标签: php node.js ubuntu exec chmod

我有一个主要应用程序是PHP服务器。 我有一个Nodejs服务器,它是一个子应用程序。

Nodejs服务器用于通知机制。我希望能够从运行在PHP上的主应用程序禁用通知机制。

有一个按钮。单击它后,我更改了Nodejs配置文件,现在我想重新启动Nodejs服务器。 我想我可以在PHP中执行以下操作:

exec(“ kill sudo lsof -t -i:4849”);    exec(“ node server.js”);

潜在问题: 1)权限问题:我想这可以通过为我的apache用户赋予节点应用程序所有权来解决。我对吗? 2)Exec:执行exec会使我的浏览器继续加载。我执行netstat并发现Nodejs服务器正在运行。这是令我担忧的问题。我想我需要做一些fork和exec方法,以便子进程(Nodejs)独立运行。

请帮助。

解决方案:

    exec("fuser -k ". NODEAPPPORT ."/tcp > /dev/null 2>&1 &");
    exec('bash -c "exec nohup setsid node "'.NODEPATH.'/app.js" > 
    /dev/null 2>&1 &"');

我将stdout和stderr重定向到/ dev / null。 我将其作为一个独立的进程来运行。它的工作原理就像一个魅力。

1 个答案:

答案 0 :(得分:1)

我的建议是: 不要。

通过Express之类的框架或其他方式将Node服务器作为独立服务器运行。然后,您可以通过专用网络公开Node应用程序的端点(这是最简单的解决方案IMO)和/或在PHP应用程序和Node app之间使用简单的授权机制。然后,您可以通过该简单的API端点启动/停止通知系统,而不必每次都终止/重新启动Node应用程序。假设由于某种原因它在启动时崩溃,您将无法判断它是从PHP应用程序中关闭了。

我不知道您的通知应用程序的工作原理如何,但是我猜它正在处理某种流,您可以在不杀死整个Node服务器的情况下轻松关闭流。