java执行linux shell命令,并拿到返回值

摘要:
=null){66conn.close();67}68if(stdOut!=null)69stdOut.close();70if(stdErr!
1 packagecom.pasier.xxx.util;
2 
3 importjava.io.IOException;
4 importjava.io.InputStream;
5 importjava.nio.charset.Charset;
6 
7 importorg.slf4j.Logger;
8 importorg.slf4j.LoggerFactory;
9 
10 importch.ethz.ssh2.ChannelCondition;
11 importch.ethz.ssh2.Connection;
12 importch.ethz.ssh2.Session;
13 importch.ethz.ssh2.StreamGobbler;
14 
15 public classRmtShellExecutor {
16 
17     private static final Logger LOG = LoggerFactory.getLogger(RmtShellExecutor.class);
18 
19     privateConnection conn;
20     privateString ip;
21     privateString usr;
22     privateString psword;
23     private String charset =Charset.defaultCharset().toString();
24 
25     private static final int TIME_OUT = 1000 * 5 * 60;
26 
27     publicRmtShellExecutor(String ip, String usr, String ps) {
28         this.ip =ip;
29         this.usr =usr;
30         this.psword =ps;
31 }
32 
33     private boolean login() throwsIOException {
34         conn = newConnection(ip);
35 conn.connect();
36         returnconn.authenticateWithPassword(usr, psword);
37 }
38 
39     public String exec(String cmds) throwsIOException {
40         InputStream stdOut = null;
41         InputStream stdErr = null;
42         String outStr = "";
43         String outErr = "";
44         int ret = -1;
45 
46         try{
47             if(login()) {
48                 Session session =conn.openSession();
49 session.execCommand(cmds);
50                 stdOut = newStreamGobbler(session.getStdout());
51                 outStr =processStream(stdOut, charset);
52                 LOG.info("caijl:[INFO] outStr=" +outStr);
53                 stdErr = newStreamGobbler(session.getStderr());
54                 outErr =processStream(stdErr, charset);
55                 LOG.info("caijl:[INFO] outErr=" +outErr);
56 session.waitForCondition(ChannelCondition.EXIT_STATUS, TIME_OUT);
57                 ret =session.getExitStatus();
58 
59             } else{
60                 LOG.error("caijl:[INFO] ssh2 login failure:" +ip);
61                 throw new IOException("SSH2_ERR");
62 }
63 
64         } finally{
65             if (conn != null) {
66 conn.close();
67 }
68             if (stdOut != null)
69 stdOut.close();
70             if (stdErr != null)
71 stdErr.close();
72 }
73 
74         returnoutStr;
75 }
76 
77     private String processStream(InputStream in, String charset) throwsIOException {
78         byte[] buf = new byte[1024];
79         StringBuilder sb = newStringBuilder();
80         while (in.read(buf) != -1) {
81             sb.append(newString(buf, charset));
82 }
83         returnsb.toString();
84 }
85 
86     public static voidmain(String[] args) {
87 
88         String usr = "root";
89         String password = "12345";
90         String serverIP = "11.22.33.xx";
91         String shPath = "/root/ab.sh";
92 
93         RmtShellExecutor exe = newRmtShellExecutor(serverIP, usr, password);
94 
95 String outInf;
96 
97         try{
98             outInf = exe.exec("sh " + shPath + " xn");
99             System.out.println("outInf= " +outInf);
100         } catch(IOException e) {
101 e.printStackTrace();
102 }
103 }
104 
105 }

免责声明:文章转载自《java执行linux shell命令,并拿到返回值》仅用于学习参考。如对内容有疑问,请及时联系本站处理。

上篇jeecg下实现自动默认模糊查询服务器安装node全教程下篇

宿迁高防,2C2G15M,22元/月;香港BGP,2C5G5M,25元/月 雨云优惠码:MjYwNzM=

相关文章

Linux教程

  管道和重定向! 保持数据流动 介绍   在前两节中,我们看了一些可以为我们操作数据的过滤器。在本节中,我们将看到我们如何将它们结合在一起来执行更强大的数据操作。 本节涉及一些阅读。即使这些机制及其使用非常简单,但如果您希望有效使用这些机制,了解其行为的各种特征也很重要。 那么他们是什么? 我们在命令行上运行的每个程序都会自动连接三个数据流。 S...

Hive metastore源码阅读(一)

不要问我为什么,因为爱,哈哈哈哈。。。进入正题,最近做项目顺带学习了下hive metastore的源码,进行下知识总结。 hive metastore的整体架构如图: 一、组成结构: 如图我们可以看到,hive metastore的组成结构分为 客户端 服务端 ,那么下来我们逐一进行分析: 1、客户端 从代码的角度来看:尼玛太多了。。我们从入口HIV...

linux系统下信号具体解释2

信号是UNIX 系统所使用的进程通信方法中,最古老的一种。信号不但能从内核发往一个进程,也能从一个进程发往还有一个进程。比如,用户在后台启动了一个要运行较长时间的程序,假设想中断其运行,能够用kill 命令把SIGTERM信号发送给这个进程,SIGTERM 将终止此进程的运行。信号还提供了向UNIX 系统进程传送软中断的简单方法。信号能够中断一个进程,而...

JAVA应用JNI调用OpenCV实现人脸检测

1.JAVA的JNI部分 调用JNI的基类 Java代码 package lveyo.bcndyl.jni.opencv;   publicclass JNIBase {              public JNIBase(){}              public JNIBase(String libraryName)...

SQLServer 的存储过程与java交互

一、   存储过程简介 Sql Server的存储过程是一个被命名的存储在服务器上的Transacation-Sql语句集合,是封装重复性工作的一种方法,它支持用户声明的变量、条件执行和其他强大的编程功能。 存储过程相对于其他的数据库访问方法有以下的优点:    (1)重复使用。存储过程可以重复使用,从而可以减少数据库开发人员的工作量。     (2)...

shell 正则表达式与文件名匹配

1) . : 匹配任意单ASCII 字符,可以为字母,或为数字。 2) 举例: ..XC..匹配deXC1t、23XCdf 等,.w..w..w.匹配rwxrw-rw-行首以^匹配字符串或字符序列 1) ^ : 允许在一行的开始匹配字符或单词。 2) 举例: ^.01 匹配0011cx4、c01sdf 等,^d 匹配drwxr-xr-x、drw-r--r-...