注册 X
我已阅读并同意  服务条款
首页 > IT技术笔记 > 查看笔记

使用java代码执行linux命令


使用Java连接Linux系统执行命令并且获取返回信息


如果需要连续执行几个linux命令,使用;(分号)隔开

如:

String[] cmd = new String[]{"/bin/sh", "-c",“cd /usr/local;pwd”};

            log.info("cmd:"+ArrayUtils.toString(cmd));

            Process ps = Runtime.getRuntime().exec(cmd);

相当于在linux执行:

cd /usr/local

pwd


点击复制

                      String result = null;		
                      try {
		            String[] cmd = new String[]{"/bin/sh", "-c",commandStr};
		            log.info("cmd:"+ArrayUtils.toString(cmd));
		            Process ps = Runtime.getRuntime().exec(cmd);
		 
                            printMessage("regular",ps.getInputStream());     //打印标准输入流返回的结果
		            printMessage("error",ps.getErrorStream());       //打印错误信息
                            Thread.sleep(100); 	//休眠100毫秒,等待子线程从缓存获取执行结果
		            while(StringUtils.isBlank(regularResult) && StringUtils.isBlank(errorResult)) {		 
                                 //如果没有执行结果
		            	Thread.sleep(500); 		//当前线程等待500毫秒
		            	if( (System.currentTimeMillis()-starttime) >= 3000 ) {break;}	//如果执行时间超过3秒,结束
		            }
		            //boolean b = ps.waitFor(10, TimeUnit.SECONDS);	//等待命令执行完成
                            //log.info("v:"+b);
		        } catch (Exception e) {
		            e.printStackTrace();
		        }

	private String regularResult = null;		//标准输出结果
	private String errorResult = null;			//错误流结果
	//多线程获取标准命令执行后 输入流信息 以及错误流信息
    private void printMessage(final String rs,final InputStream input) {
    	final String as = null;
    	new Thread(new Runnable() {
			@Override
			public void run() {
				Reader reader = new InputStreamReader(input);
				BufferedReader bf = new BufferedReader(reader);
				String line = null;
				StringBuffer sb = new StringBuffer();
				try {
					while((line=bf.readLine())!=null) {
						sb.append(line).append("
");
					}
					if("error".equals(rs)) {
						//log.info("error:");
						//log.info(sb.toString());
						errorResult = sb.toString();
					}else if("regular".equals(rs)) {
						//log.info(sb.toString());
						regularResult = sb.toString();
					}
					
					
				} catch (Exception e) {
					e.printStackTrace();
				}
			}
		}).start();
    }			
		

 打赏        分享



评论