4

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

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

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

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

我无计可施。有任何想法吗?

4

3 回答 3

7

由于该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(保留环境)开关。

于 2012-11-14T11:49:08.483 回答
2

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

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

于 2012-11-14T12:09:23.617 回答
0

永久创建符号链接

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");
于 2016-03-22T14:09:18.547 回答