这让我发疯了。我需要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
我的智慧结束了。有什么想法吗?
答案 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");