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



所以开始;我正在尝试通过 PHP 启动节点应用程序。我创建了一个脚本,可以检查节点应用程序是否正在运行,关闭它并启动它。但是我在使用 PHP 中使用屏幕时遇到了一些麻烦。

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

我目前正在使用以下命令:

screen -dmS NODEJS node main.js 121016

现在我可以启动node,并获取输出(只要我在某处添加一个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相同?

无论如何,我完全迷失了,不知道我还能做什么。我不希望节点一直运行,这就是为什么我希望它在管理器中单击保存(在 php 中)时启动,然后在完成任务后自行关闭/停止。

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

任何感兴趣的人都可以更新此内容。

导致此问题的原因是我没有正确管理管道,并且没有发送 stdOut 管道。问题主要发生在我尝试删除屏幕时,因为它没有给我正确的PID。

关于我最后使用的更新:

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

最后一个"2>"我没有正确管理。

最新更新