用PHP执行外壳脚本



我需要通过 php 执行 shell script 。我正在使用 Apache Web服务器运行我的PHP页面。

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

这是我的 php 文件:

<?php
$output = shell_exec('sh /usr/local/hadoop-3.0.2/copytoallhdfs.sh');
echo "<pre>" . $output . "</pre>";
?>

这是我的shell脚本 copytoallhdfs.sh

#!/bin/bash
myarray=`bin/hdfs dfs -ls -C /`
echo $myarray; 
for name in $myarray 
do bin/hdfs dfs -copyFromLocal myData/* $name; 
done

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

也许这是我的 php.ini 中缺少的一些权限问题或其他问题。
任何人都可以给我一个工作。

谢谢。

使用 2>&1来实现

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

2是指该过程的第二个文件描述符,即stderr。

>表示重定向。

&1表示重定向的目标应与第一个文件描述符,即stdout。

相同。

带有@nacho的评论,我想是否对我的 sh script 的位置有事。我编辑了SH脚本并插入了pwd,以验证它给我的位置。然后我意识到它给了我Apache目录的位置。

所以我更改了位置,并插入了执行命令bin/hdfs的完整路径。它起作用了!

这是我更新的脚本:

#!/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

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

最新更新