String cmdstring = "chmod a+x test.sh"
Process proc = Runtime.getRuntime().exec(cmdstring)
proc.waitFor() //阻塞,直到上述命令执行完
cmdstring = "bash test.sh" //这里也可以是ksh等
proc 或返= Runtime.getRuntime().exec(cmdstring)
// 注意下面的 *** 作
string 宏基ls_1
BufferedReader bufferedReader = new BufferedReader( new InputStreamReader(proc.getInputStream())
while ( (ls_1=bufferedReader.readLine()) != null)
bufferedReader.close()
proc.waitFor()
为什么要有上面那段 *** 作呢?
原因是:可执行程序的输出可能会比较多,而运行窗口的输出缓冲区有限,会造成waitFor一直阻塞。解决的办法是衫绝饥,利用Java提供的Process类提供的getInputStream,getErrorStream方法让Java虚拟机截获被调用程序的标准输出、错误输出,在waitfor()命令之前读掉输出缓冲区中的内容。
*** 运行shell脚本
* @param shell 需要运行宴册的shell脚本
*/枝仿
public static void execShell(String shell){
try {
Runtime rt = Runtime.getRuntime()
rt.exec(shell)
} catch (Exception e) {
e.printStackTrace()
}
}
/**
* 运行shell
*
* @param shStr
*需要执行的shell
* @return
* @throws IOException
*/
public static List runShell(String shStr) throws Exception {
List<String>strList = new ArrayList()
Process process
process = Runtime.getRuntime().exec(new String[]{"/晌搭宏bin/sh","-c",shStr},null,null)
InputStreamReader ir = new InputStreamReader(process
.getInputStream())
LineNumberReader input = new LineNumberReader(ir)
String line
process.waitFor()
while ((line = input.readLine()) != null){
strList.add(line)
}
return strList
}
使用shell脚本启动zookeeper步骤:采用shell脚本启动zookeeper,渗御首先新建文件start.sh写入内容(rh1rh2rh3分别是主机名。此处需要ssh):#!/bin/shecho“startzkServer…”foriinrh1rh2rh3dossh$i“/usr/local/zookeeper3.4/bin/zkServer.shstart”done写好后保存,加上执行权限:chmodu+xstart.sh运行:./start.sh看见启动成功了,有输出。但是输入jps查看的时候,会发现没有QuorumPeerMain进程。说明没有启动成功。启喊姿分析原因首先知道交互式shell和非交互式shell、登录shell和非登录shell是有区别的在登录shell里,环境信息需要读取/etc/profile和~/.bash_profile,~/.bash_login,and~/.profile按顺序最先的一个,并执行其中的命令。除非被—noprofile选项禁止了;在非登录shell里,环境信息只读取/etc/bash.bashrc和~/.bashrc手工执行是属于登陆shell,脚本执行数据非登陆shell,而我的linux环境配置中只对/etc/profile进行了jdk1.6等环境的配置,所以脚本执行/usr/local/zookeeper3.4/bin/zkServer.shstart启动zookeeper失败了解决方法把profile的配置信息悄绝echo到.bashrc中echo‘source/etc/profile’~/.bashrc在/zookeeper/bin/zkEnv.sh的中开始位置添加exportJAVA_HOME=/usr/local/jdk1.6(就像hadoop中对hadoop-env.sh的配置一样)采用shell脚本启动zookeeper,首先新建文件start.sh写入内容(rh1rh2rh3分别是主机名。此处需要ssh):#!/bin/shecho“startzkServer就可以了。欢迎分享,转载请注明来源:内存溢出
评论列表(0条)