【发布时间】:2017-05-23 08:42:25
【问题描述】:
所以开始;我正在尝试通过 PHP 启动节点应用程序。我创建了一个脚本,可以检查节点应用程序是否正在运行,关闭它并启动它。但是我在 PHP 中使用 screen 时遇到了一些麻烦。
现在,在我继续之前,关于我不应该怎么做的 cmets 无济于事,我需要通过 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 相同?
无论如何,我完全迷失了,不知道我还能做什么。我不希望节点不断运行,这就是为什么我希望它在您单击管理器(在 php 中)中的保存时启动,然后在完成任务时自行关闭/停止。
任何帮助都会有很长的路要走,我已经花了几个小时试图解决它,但我没有找到任何地方......无论如何,谢谢。
【问题讨论】:
-
你为什么还要尝试使用屏幕?
-
只要使用
exec('node main.js &'); -
@JonStirling 我正在使用屏幕,以便在出现任何问题时连接到该程序,因为它与网站一起运行。你有更好的方法吗?这允许我将它的命令也发送到标准输入?因为我还需要向它发送命令!
-
嗨@Philipp 这将在服务器托管上工作吗?我认为他们禁用了 exec,shell_exec 会起作用吗?
-
如果他们允许
shell_exec,他们也允许exec- 但如果他们不这样做,只需将exec替换为shell_exec
标签: php node.js shell-exec gnu-screen proc-open