[英]Command not found: PHP 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
和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
命令只运行,当你给出完整路径时,我怀疑, /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
(保护环境)切换。
弄清楚了,我还需要定义节点:
$asdf = system('sudo -E -u dalton /usr/local/bin/node /usr/local/bin/forever restart botti.js 2>&1');
永远创建一个符号链接
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");
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.