2017-05-23 137 views
0

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

现在,在我继续之前,我不应该这样做的意见不会起作用,我需要通过PHP启动它,因为它与网站一起工作,并且我希望我们的客户能够更改设置,这将重新启动应用程序(除非您有其他想法)。

我目前使用的命令:

screen -dmS NODEJS node main.js 121016 

现在,我可以启动节点,并得到输出(只要我添加process.exit某处所以PHP /节点不会永远运行)。我已经在正确的目录还,我使用这个代码来运行它:

$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中)时它会启动它,然后在它完成任务时关闭/停止自身。

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

+0

为什么你甚至试图使用屏幕? –

+0

只需使用'exec('node main.js &');' – Philipp

+0

@JonStirling我正在使用屏幕,以便在出现任何问题时连接到程序,因为它与网站一起运行。如果它们允许'shell_exec,那么它允许我发送它的命令也stdin?因为我需要发送命令也! –

回答

1

对此感兴趣的任何人的更新。

该问题是由于我没有正确管理管道并且未发送stdOut管道而引起的。问题主要发生在我试图删除屏幕时,因为它没有给我正确的PID。

什么我到底使用的更新:

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

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