未find命令:P​​HP exec()

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

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

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

接下来,我尝试which forever type 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

我在智慧的结尾。 有任何想法吗?

由于forever命令只运行,当你给出完整的path时,我怀疑/usr/local/bin不在你的PATH环境variables中,它包含所有的目录,默认情况下search可执行命令,我怀疑你在Linux上,可能与其他操作系统有所不同)

我怀疑forever调用/usr/bin/env nodeenv的错误可能是由于nodePATH之外造成的。

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

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

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

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

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

创build一个永远的符号链接

 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");