您的位置:首页 > 运维架构 > Shell

关于java调用linux shell 的问题

2013-12-03 20:06 183 查看
问题的提出:

shell脚本要做离线的数据处理任务

java调用脚本,将这种处理任务封装成webservice

特点

shell处理单个时间长

每次要处理文件量大

这里目前只做调用分析:

原来的:

//变为成员变量方式
protected volatile Process process;

private void runShell(String cmd) {
try {
logger.info("the command " + cmd);
// create a process for the shell
ProcessBuilder pb = new ProcessBuilder("bash", "-c", cmd);
process = pb.start();
final InputStream inputStream = process.getInputStream();
final InputStream errorStream = process.getErrorStream();
new Thread(new Runnable() {
@Override
public void run() {
try{
BufferedReader reader=new BufferedReader(new InputStreamReader(inputStream));
String line;
while((line=reader.readLine())!=null){
//                            logConsole(line);
logger.debug(line);
}
}catch(Exception e){
//                        log(e);
e.printStackTrace();
logger.debug("接收日志出错,推出日志接收");
}
}
},"one").start();
new Thread(new Runnable() {
@Override
public void run() {
try {
BufferedReader reader=new BufferedReader(new InputStreamReader(errorStream));
String line;
while((line=reader.readLine())!=null){
//                                logConsole(line);
logger.debug(line);
}
} catch (Exception e) {
//                            log(e);
e.printStackTrace();
logger.debug("接收日志出错,推出日志接收");
}
}
},"error").start();
//            InputStream shellIn = process.getInputStream(); // this captures the output from the command
int shellExitStatus = 0;
try {
//等待程序结果
shellExitStatus = process.waitFor();
} catch (InterruptedException e) {
e.printStackTrace();
}finally{
process=null;
}
} catch (IOException ignoreMe) {
ignoreMe.printStackTrace();
}
}


View Code

实验结果:

同时处理100条语音。

第一个用时50min。

第二个用时25min。

优势:

使用processbuild 构造基于os的进程

使用process作为类变量并且使用volatile来进行描述

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: