未找到命令:PHP exec()

未找到命令:PHP exec(),php,node.js,shell,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 接

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

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

然而,当我运行它时,我得到了
sudo:forever:command not found

接下来,我尝试永远的
和永远
类型,这两种类型都给了我:
forever:/usr/local/bin/forever

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

编辑:输入错误后,错误现在为:
/usr/bin/env:node:没有这样的文件或目录


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

因为
永远
命令只会运行,当您给出完整路径时,我怀疑
/usr/local/bin
不在您的
路径
环境变量中,该变量包含默认情况下搜索可执行命令的所有目录,这些目录由
分隔:
(我怀疑您使用的是Linux,其他操作系统可能有所不同)

我怀疑
永远
调用
/usr/bin/env node
。来自
env
的错误可能也是由于
节点
在您的
路径
之外造成的

要在php中设置路径,请使用
putenv('PATH=');
e、 g.附加
/usr/local/bin

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

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

解决了这个问题,我还需要定义节点:


$asdf=system('sudo-E-u dalton/usr/local/bin/node/usr/local/bin/forever restart botti.js 2>&1');
为永久创建符号链接

ln -s /usr/bin/nodejs /usr/bin/node
如果nodejs仍然被称为“nodejs”,也可以被称为“node”

我会解决永远执行的问题

对于php端,请尝试使用此


是的,
/user/..
应该是
/usr/..
?是的,我刚刚修复了它。现在错误是
/usr/bin/env:node:没有这样的文件或目录
exec函数是一个危险的函数,不应该在php.ini中使用和禁用。使用exec解决web应用程序的问题不是正确的方法。如果我可以如果我想通过web重新启动节点脚本的另一种方法,我会这样做。但我想不起来。我可能需要补充的是,我所说的适用于web应用程序,当然不适用于控制台应用程序。添加了这一行,然后将/usr/local/bin前缀删除为ever,然后我恢复为ever not found错误。echo exec也是如此('export PATH=$PATH:/usr/local/bin;sudo-u道尔顿永远重新启动botti.js 2>&1')
你试过
sudo-E
吗?sudo可能被配置为重置路径,在这种情况下,你将不得不永远更改
脚本中的路径编辑:啊,我看到你找到了。无论如何,路径似乎仍然是错误的。我知道,我仍在尝试找到它,但这段粗心的代码现在仍然有效。谢谢你的帮助帮助
ln -s /usr/bin/nodejs /usr/bin/node
echo shell_exec("your command sh");