繁体   English   中英

用php执行shell脚本

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM