3
回答
java 调用远程服务器shell脚本
华为云4核8G,高性能云服务器,免费试用   

关于使用java调用远程服务器shell脚本的问题:

方式1、使用Apache的commons-exec包执行。但是貌似这个只能执行本地的shell脚本。没看到可以调用远程的。 

文档:http://commons.apache.org/proper/commons-exec/tutorial.html

             String line = String.format("sh %s %s %s %s", batchShellPath,date);
	         log.info("trying to execute command : {}", line);
	         CommandLine cmdLine = CommandLine.parse(line);
	         DefaultExecutor executor = new DefaultExecutor();
	         
	         int exitValue = executor.execute(cmdLine);

 方式2、使用ganymed-ssh2-build210-hudson-1这个包里执行。可以执行远程服务器的但是这个好像没法获取脚本执行的退出值。(方式1里面就可以获取到程序的退出值、如代码中的:exitValue)

                Session session = conn.openSession(); 
				session.execCommand(cmds);
				
				in = session.getStdout();
				System.out.println("ExitStatus::"+session.getExitStatus());
				System.out.println("ExitSignal::"+session.getExitSignal());
				
				result = IOUtils.toString(in,  this.charset);

 

哪位大佬知道的话  麻烦指点一下。。

<无标签>
举报
winston952
发帖于1周前 3回/159阅
共有3个答案 最后回答: 1周前

直接取InputStream不就完了么

 if(conn.isAuthenticationComplete())
             {
                 Session sess = conn.openSession();
                 sess.execCommand("hostname");
                  InputStream stdout = new StreamGobbler(sess.getStdout());
                   InputStreamReader isr = new InputStreamReader(stdout);
                   BufferedReader br = new BufferedReader(isr);
                   while (true) {
                           String line = br.readLine();    
                           if (line == null)
                                   break;
                          System.out.println(line);
                   }
                   br.close();isr.close();stdout.close();
             }

--- 共有 1 条评论 ---
winston952这个是输出到控制台的内容 1周前 回复
顶部