[英]Execute a shell script with php
我需要通过php执行一个shell 脚本。 我正在使用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;
的输出echo $myarray;
,但我的浏览器上没有显示任何内容。
也许是一些权限问题或我的php.ini 中缺少某些东西,但我无法解决这个问题。
任何人都可以请给我一个解决方法。
谢谢你。
使用2>&1
来实现
$output = shell_exec('sh /usr/local/hadoop-3.0.2/copytoallhdfs.sh 2>&1');
2
指的是进程的第二个文件描述符,即stderr。
>
表示重定向。
&1
表示重定向的目标应该与第一个文件描述符位于同一位置,即标准输出。
有了@nacho 的评论,我想这是否与我的sh脚本的位置有关。 我编辑了我的 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
这是一个愚蠢的错误,但我想它可能会发生!
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.