【问题标题】:Command not found: PHP exec()找不到命令:P​​HP exec()
【发布时间】:2012-11-14 11:20:15
【问题描述】:

这快把我逼疯了。我需要让 php 执行一个命令来重新启动在节点中运行的脚本。我正在使用一个永远调用的节点应用程序来运行所述脚本。代码如下:

<?php 
  echo '<pre>';
  echo exec('sudo -u dalton forever restart botti.js 2>&1');
  echo '</pre>';
?>

但是,当我运行它时,我得到sudo: forever: command not found

接下来,我尝试which forevertype forever,它们都给了我:
forever: /usr/local/bin/forever

我将代码编辑为:
echo exec('sudo -u dalton /usr/local/bin/forever restart botti.js 2&gt;&amp;1');

编辑:输入错误后,现在的错误是:
/usr/bin/env: node: No such file or directory

我已经束手无策了。有什么想法吗?

【问题讨论】:

  • 是的,/user/... 应该是/usr/... 的拼写错误?
  • 是的,我刚刚解决了这个问题。现在错误是/usr/bin/env: node: No such file or directory
  • exec 函数是一个危险函数,不应在您的 php.ini 中使用和禁用。使用 exec 解决 Web 应用程序的问题不是正确的方法。
  • 如果我能想到另一种通过网络重新启动节点脚本的方法,我会这样做。但什么都没有想到。
  • 我可能需要补充一点,我所说的适用于 Web 应用程序,当然不适用于控制台应用程序。

标签: php node.js shell


【解决方案1】:

由于forever 命令仅运行,当您提供完整路径时,我怀疑/usr/local/bin 不在您的PATH 环境变量中,其中包含所有目录,默认情况下搜索可执行命令,以: 分隔(我怀疑您使用的是 Linux,可能与其他操作系统不同)

我怀疑forever 打电话给/usr/bin/env node。来自env 的错误可能是由于node 也在您的PATH 之外。

要在 php 中设置 PATH,请使用 putenv('PATH=&lt;your path here&gt;'); 例如追加/usr/local/bin:

putenv('PATH=' . getenv('PATH') . ':/usr/local/bin')

这也可能是sudo 问题,请尝试-E(保留环境)开关。

【讨论】:

  • 添加该行,然后将 /usr/local/bin 前缀删除为永远,然后我恢复到永远找不到错误。
  • echo exec('export PATH=$PATH:/usr/local/bin; sudo -u dalton forever restart botti.js 2&gt;&amp;1'); 相同
  • 你试过sudo -E吗? sudo 可能被配置为重置 PATH,在这种情况下,您必须更改 forever 脚本中的 PATH 编辑:啊,我看到您想通了。无论如何,似乎 PATH 仍然是错误的
  • 我知道,而且我仍在努力解决这个问题,但是这段草率的代码现在可以使用。感谢您的帮助!
【解决方案2】:

想通了,我也需要定义节点:

$asdf = system('sudo -E -u dalton /usr/local/bin/node /usr/local/bin/forever restart botti.js 2&gt;&amp;1');

【讨论】:

    【解决方案3】:

    创建一个永久的符号链接

    ln -s /usr/local/bin/forever /usr/bin/env/forever
    

    如果它仍然被称为“nodejs”,也适用于 nodejs。将其称为“节点”

    ln -s /usr/bin/nodejs /usr/bin/node
    

    我会解决永远执行的问题。

    对于php端,试试这个

    echo shell_exec("your command sh");
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2019-04-14
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-05
      • 1970-01-01
      • 2015-07-06
      相关资源
      最近更新 更多