通过 PHP 在屏幕会话中启动节点时出现问题

Trouble with launching node inside a screen session via PHP

那么开始吧;我正在尝试通过 PHP 启动节点应用程序。我创建了一个脚本,可以检查节点应用程序是否 运行ning,关闭它并启动它。但是我在使用带有 PHP.

的屏幕时遇到了一些麻烦

现在,在我继续之前,关于我不应该如何做的评论无济于事,我需要通过 PHP 启动它,因为它与网站一起工作,我想要我们的客户端能够更改设置,这将重新启动应用程序(除非您有其他想法)。

我目前正在使用命令:

screen -dmS NODEJS node main.js 121016

现在我可以启动节点并获取输出(只要我在某处添加 process.exit 这样 PHP/Node 就不会永远 运行 了。我也已经在正确的目录中,我正在使用此代码启动它:

$out = shell_exec('screen -dmS NODEJS node main.js 121016');
var_dump($out);

但它没有创建屏幕会话。我也试过:

$proc = proc_open('screen -dmS NODEJS node main.js 121016', $this->pipe_spec, $pipes);

我也尝试使用 exec 和反引号,但我相当确定反引号与 shell_exec?

相同

反正我完全迷路了,不知道还能做什么。我不希望节点不断 运行ning,这就是为什么我希望它在您单击管理器中的保存时启动(在 php 中),然后当它有时 closes/stops 本身完成了它的任务。

任何帮助都会有很长的路要走,我花了几个小时试图解决这个问题,但我无处可去...无论如何谢谢。

任何感兴趣的人的更新。

问题是因为我没有正确管理管道,也没有发送 stdOut 管道。问题主要发生在我试图移除屏幕时,因为它没有给我正确的 PID。

我最后使用的更新:

node main.js > /dev/null 2> logs/app-error.log & echo $!

最后一个'2>'我没管理好。