找不到命令:P​​HP exec()

时间:2012-11-14 11:20:15

标签: php node.js shell

这让我发疯了。我需要php执行一个命令来重启节点中运行的脚本。我正在使用一个名为forever的节点应用来运行所述脚本。代码如下:

<?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>&1');

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

我的智慧结束了。有什么想法吗?

3 个答案:

答案 0 :(得分:6)

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

我怀疑forever来电/usr/bin/env node。来自env的错误可能是因node超出您的PATH而造成的。

要在php中设置PATH,请使用putenv('PATH=<your path here>'); 例如附加/usr/local/bin

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

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

答案 1 :(得分:2)

想出来,我还需要定义节点:

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

答案 2 :(得分:0)

为永久

创建符号链接
ln -s /usr/local/bin/forever /usr/bin/env/forever

并且对于nodejs,如果它仍然被称为&#34; nodejs&#34;。将其称为&#34;节点&#34;

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

我将解决永远执行问题。

对于php方面,请尝试使用此

echo shell_exec("your command sh");