Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/shell/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用php执行shell脚本_Php_Shell_Hadoop - Fatal编程技术网

使用php执行shell脚本

使用php执行shell脚本,php,shell,hadoop,Php,Shell,Hadoop,我需要通过php执行一个shell脚本。我正在使用Apacheweb服务器来运行我的php页面 我知道还有其他类似的问题(我已经经历过),但由于某些原因,我无法使我的工作 这是我的php文件: <?php $output = shell_exec('sh /usr/local/hadoop-3.0.2/copytoallhdfs.sh'); echo "<pre>" . $output . "</pre>"; ?> 我的copytoallhdfs.sh

我需要通过php执行一个shell脚本。我正在使用Apacheweb服务器来运行我的php页面

我知道还有其他类似的问题(我已经经历过),但由于某些原因,我无法使我的工作

这是我的php文件:

<?php

$output = shell_exec('sh /usr/local/hadoop-3.0.2/copytoallhdfs.sh');

echo "<pre>" . $output . "</pre>";

?>
我的copytoallhdfs.sh脚本位于路径
/usr/local/hadoop-3.0.2上​。所以通常php应该执行我的shell脚本并显示
echo$myarray的输出,但我的浏览器上没有显示任何内容

可能是权限问题或我的php.ini中缺少什么,但我无法解决这个问题。
谁能给我一个解决这个问题的办法


谢谢。

使用
2>&1
来实现这一点

#!/bin/bash

myarray=`/usr/local/hadoop-3.0.2/bin/hdfs dfs -ls -C /`
echo $myarray;

for name in $myarray
do /usr/local/hadoop-3.0.2/bin/hdfs dfs -copyFromLocal /usr/local/hadoop-3.0.2/myData/* $name;
done
2
指进程的第二个文件描述符,即stderr

表示重定向


&1
意味着重定向的目标应该与第一个文件描述符位于同一位置,即stdout。

在@nacho的评论中,我想如果这与我的sh脚本的位置有关。我编辑了我的sh脚本并插入了
pwd
,以验证它提供给我的位置。然后我意识到它给了我apache目录的位置

因此,我更改了位置并插入了执行命令的完整路径
bin/hdfs
。 成功了

以下是我的更新脚本:


这是一个愚蠢的错误,但我想它可能会发生

我把它作为我的浏览器的输出
/usr/local/hadoop-3.0.2/copytoallhdfs.sh:1:/usr/local/hadoop-3.0.2/copytoallhdfs.sh:bin/hdfs:not found
老实说,我不太理解
2>1和
.2>&1它会将响应发送到srdout或您的变量。我不知道你到底想在shell中实现什么。尝试在脚本文件中使用bin/hdfs的绝对路径作为/bin/hdfsI我不确定你是否使用过Hadoop,但我的shell脚本会将数据文件上载到Hadoop。首先,它循环hadoop文件系统以检索所有可用的文件夹,然后将数据文件上载到这些文件夹。行
echo$myarray应该显示hadoop中可用的所有文件夹,但它不会显示在我的浏览器上。我确实使用
/copytoallhdfs.sh
运行了我的shell脚本,没有问题。在这种情况下,可能是权限问题,因为php以
www data
用户的名义运行Scrit。在该目录上执行
chmod
chown
,或使用@mario i的
sudo
.PD可以使其工作。谢谢你的额外支持!
$output = shell_exec('sh /usr/local/hadoop-3.0.2/copytoallhdfs.sh 2>&1');
#!/bin/bash

myarray=`/usr/local/hadoop-3.0.2/bin/hdfs dfs -ls -C /`
echo $myarray;

for name in $myarray
do /usr/local/hadoop-3.0.2/bin/hdfs dfs -copyFromLocal /usr/local/hadoop-3.0.2/myData/* $name;
done