java怎么调用shell脚本

java怎么调用shell脚本,第1张

 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就可以了。


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/12440611.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-25
下一篇 2023-05-25

发表评论

登录后才能评论

评论列表(0条)

保存