首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用php执行shell脚本

使用php执行shell脚本
EN

Stack Overflow用户
提问于 2019-02-23 18:34:36
回答 2查看 59关注 0票数 1

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

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

下面是我的php文件:

代码语言:javascript
复制
<?php

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

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

?>

这是我的shell脚本copytoallhdfs.sh

代码语言:javascript
复制
#!/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中缺少的东西,但我就是解决不了这个问题。

有人能给我个工作吗。

谢谢。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2019-02-23 20:24:40

有了@nacho的评论,我想如果要对我的 sh 脚本的位置做些什么,我会编辑我的sh脚本并插入pwd来验证它给我的位置。然后我意识到它给了我apache目录的位置。

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

下面是我更新的脚本:

代码语言:javascript
复制
#!/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

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

票数 0
EN

Stack Overflow用户

发布于 2019-02-23 18:37:55

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

代码语言:javascript
复制
$output = shell_exec('sh /usr/local/hadoop-3.0.2/copytoallhdfs.sh 2>&1');

2引用进程的第二个文件描述符,即stderr。

>的意思是重定向。

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54844798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档