【问题标题】:Trouble with launching node inside a screen session via PHP通过 PHP 在屏幕会话中启动节点时出现问题
【发布时间】: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


【解决方案1】:

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

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

我最后使用的更新:

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

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

【讨论】:

    猜你喜欢
    • 2015-07-25
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-04-03
    • 1970-01-01
    • 1970-01-01
    • 2017-01-06
    相关资源
    最近更新 更多