【发布时间】:2015-05-15 11:06:55
【问题描述】:
我有一个这样的 shell 脚本。
#!/bin/sh
/home/hduser/Downloads/hadoop/bin/stop-all.sh
echo "RUNNING HADOOP PROGRAM"
cd /home/hduser/Downloads/hadoop
sudo rm -R /tmp/*
sudo rm -R /app/*
cd
sudo mkdir -p /app/hadoop/tmp
sudo chown hduser:hadoop /app/hadoop/tmp
sudo chmod 750 /app/hadoop/tmp
hadoop namenode -format
/home/hduser/Downloads/hadoop/bin/start-all.sh
jps
hadoop dfs -mkdir -p ~/Downloads/hadoop/input
hadoop dfs -copyFromLocal /home/hduser/Desktop/iris.arff ~/Downloads/hadoop/input
hadoop jar ~/Desktop/try.jar 2 weka.classifiers.trees.J48 ~/Downloads/hadoop/input ~/Downloads/hadoop/output
/home/hduser/Downloads/hadoop/bin/stop-all.sh
我正在像这样在我的 java 程序中调用这个脚本
public class UIinput
{
public static void main(String[] args) throws IOException
{
// Runtime.getRuntime().exec("/home/hduser/Desktop/initial.sh");
new ProcessBuilder("/home/hduser/Desktop/initial.sh");
ProcessBuilder pb = new ProcessBuilder("/home/hduser/Desktop/initial.sh");
Process process=pb.start();
InputStream is = process.getInputStream();
InputStreamReader isr = new InputStreamReader(is);
BufferedReader br = new BufferedReader(isr);
String line;
System.out.printf("Output of running %s is:",
Arrays.toString(args));
while ((line = br.readLine()) != null)
{
System.out.println(line);
}
}
}
我的 start-all.sh、stop-all.sh 和 echo 命令在脚本中正在执行,但其他命令没有执行。我的输出是这样的
Output of running [] is:no jobtracker to stop
localhost: no tasktracker to stop
no namenode to stop
localhost: no datanode to stop
localhost: no secondarynamenode to stop
RUNNING HADOOP PROGRAM
starting namenode, logging to /home/hduser/Downloads/hadoop/libexec/../logs/hadoop-hduser-namenode-ubuntu.out
localhost: starting datanode, logging to /home/hduser/Downloads/hadoop/libexec/../logs/hadoop-hduser-datanode-ubuntu.out
localhost: starting secondarynamenode, logging to /home/hduser/Downloads/hadoop/libexec/../logs/hadoop-hduser-secondarynamenode-ubuntu.out
starting jobtracker, logging to /home/hduser/Downloads/hadoop/libexec/../logs/hadoop-hduser-jobtracker-ubuntu.out
localhost: starting tasktracker, logging to /home/hduser/Downloads/hadoop/libexec/../logs/hadoop-hduser-tasktracker-ubuntu.out
stopping jobtracker
localhost: stopping tasktracker
no namenode to stop
任何人都可以帮助我吗?当我运行我的 java 代码时,我希望所有命令都在 shell 脚本中执行。 谢谢
【问题讨论】:
-
如果脚本失败,您可以使用 process.getErrorStream() 找到由读取/消耗 system.err 引起的 root,就像您已经为 System.out 所做的那样。
-
我试过了。但它没有打印任何东西..@mbsau
-
我在给定的输出中看不到任何错误。从技术上讲,所有命令都应该从脚本中执行。您在脚本执行时是否看到任何错误?
-
没有错误。但是脚本中的几行没有执行。我通过脚本检查了脚本。除了启动和停止脚本之外,没有执行其他命令@sras
-
sudo 命令可能会导致这种情况。如果您能够以 root 身份运行程序您可以运行 java 程序。不要忘记在脚本中删除 sudo。顺便问下 hduser 可以在 shell 上运行 jps 吗?