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

通过PHP在屏幕会话中启动节点时出现问题,php,node.js,shell-exec,gnu-screen,proc-open,Php,Node.js,Shell Exec,Gnu Screen,Proc Open,那么开始吧;我试图通过PHP启动一个节点应用程序。我创建了一个脚本,可以检查节点应用程序是否正在运行,关闭它并启动它。但是我在用PHP使用screen时遇到了一些问题 现在,在我继续之前,关于我不应该这样做的评论将不会有帮助,我需要通过PHP启动它,因为它与一个网站一起工作,我希望我们的客户能够更改设置,这将重新启动应用程序(除非你有其他想法) 我当前正在使用以下命令: screen -dmS NODEJS node main.js 121016 现在我可以启动node并获得输出(只要我在某个

那么开始吧;我试图通过PHP启动一个节点应用程序。我创建了一个脚本,可以检查节点应用程序是否正在运行,关闭它并启动它。但是我在用PHP使用screen时遇到了一些问题

现在,在我继续之前,关于我不应该这样做的评论将不会有帮助,我需要通过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
和back ticks,但我相当确定back ticks与shell\u exec相同

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


任何帮助都会有很长的路要走,我花了几个小时试图解决它,但我没有得到任何地方。。。无论如何,谢谢。

任何感兴趣的人都可以了解这方面的最新情况

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

关于我最后使用的内容的更新:

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

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

为什么你还要尝试使用screen?只需使用
exec('node main.js&')
@JonStirling我正在使用screen,这样我可以连接到程序,以防出现任何错误,因为它与网站一起运行。你有更好的方法吗?这样我就可以把it命令也发送到stdin了?因为我也需要发送命令!Hi@Philipp这在服务器托管上有效吗?我认为他们禁用了exec,shell_exec会工作吗?如果他们允许
shell_exec
,他们也允许
exec
——但如果他们不允许,就用
shell_exec
替换
exec