实战:第十篇:使用Java代码获取Linux系统执行命令后的结果

需求一:使用Java代码获取Linux系统执行命令后的结果

 

需求二:获取xml节点数据

解答:

     
    import java.io.*;
    import java.lang.management.ManagementFactory;
    import java.lang.management.MemoryMXBean;
    import java.util.*;
    import java.util.concurrent.CountDownLatch;
    import java.util.regex.Matcher;
    import java.util.regex.Pattern;
     
    import com.jcraft.jsch.ChannelExec;
    import com.jcraft.jsch.JSch;
    import com.jcraft.jsch.JSchException;
    import com.jcraft.jsch.Session;
    import org.dom4j.Document;
    import org.dom4j.DocumentException;
    import org.dom4j.Element;
    import org.dom4j.io.SAXReader;
    import org.dom4j.tree.DefaultAttribute;
    import org.springframework.scheduling.concurrent.ThreadPoolTaskExecutor;
    import org.springframework.util.CollectionUtils;
    import org.springframework.util.StringUtils;
    import xsf.data.*;
     
    /**
     * SSH工具类
     * @author
     * 2013-4-7
     */
    public class TestGetData {
     
     
        public static void main(String args[]){
     
     
        }
     
        public static Map getXml(String url){
            Map<String, String> hashMap = new HashMap<>();
            //创建解析器
            SAXReader saxreader = new SAXReader();
            //读取文档
            Document doc = null;
            try {
                doc = saxreader.read(new File(url));
            } catch (DocumentException e) {
                e.printStackTrace();
            }
            //获取根
            Element root = doc.getRootElement();
            //获取子节点
            List<Element> list = root.elements();
            for (Element element : list) {
                String name = element.getName();
                if("System".equals(name)){
                    Element dbConnection = element.element("DataBase").element("DBConnection");
                    String removeAbandoned = dbConnection.attributeValue("removeAbandoned");
                    hashMap.put("removeAbandoned",removeAbandoned != "" && removeAbandoned != null ? removeAbandoned : "");
                    String removeAbandonedTimeout = dbConnection.attributeValue("removeAbandonedTimeout");
                    hashMap.put("removeAbandonedTimeout",removeAbandonedTimeout != "" && removeAbandonedTimeout != null ? removeAbandonedTimeout : "");
                    String logAbandoned = dbConnection.attributeValue("logAbandoned");
                    hashMap.put("logAbandoned",logAbandoned != "" && logAbandoned != null ? logAbandoned : "");
                }
                if("Service".equals(name)){
                    Element connector = element.element("Connector");
                    hashMap.put("port",connector.attributeValue("port"));
                    hashMap.put("protocol",connector.attributeValue("protocol"));
                    hashMap.put("maxThreads",connector.attributeValue("maxThreads"));
                    hashMap.put("connectionTimeout",connector.attributeValue("connectionTimeout"));
                }
                if("ConnectionSettings".equals(name)){
                    List<Element> settings = element.elements("Settings");
                    for (Element setting : settings) {
                        String attributeValue = setting.attributeValue("Id");
                        if("XUGUConnection".equals(attributeValue)){
                            List<Element> elements = setting.elements("Add");
                            for (Element attr : elements) {
                                List<Object> attributes = attr.attributes();
                                DefaultAttribute value = (DefaultAttribute) attributes.get(0);
                                String valueValue = value.getValue();
                                DefaultAttribute data = (DefaultAttribute) attributes.get(1);
                                String dataValue = data.getValue();
                                if("removeAbandoned".equals(valueValue)){
                                    hashMap.put("removeAbandoned",dataValue);
                                }
                                if("removeAbandonedTimeout".equals(valueValue)){
                                    hashMap.put("removeAbandonedTimeout",dataValue);
                                }
                                if("logAbandoned".equals(valueValue)){
                                    hashMap.put("logAbandoned",dataValue);
                                }
                            }
                        }
                    }
                }
     
            }
            return hashMap;
        }
    //
    //
    //    static ThreadPoolTaskExecutor threadPoolTaskExecutor;
    //
    //    static {
    //        threadPoolTaskExecutor = new ThreadPoolTaskExecutor();
    //        threadPoolTaskExecutor.setCorePoolSize(5);
    //        threadPoolTaskExecutor.setMaxPoolSize(10);
    //        threadPoolTaskExecutor.setQueueCapacity(100);
    //        threadPoolTaskExecutor.initialize();
    //    }
    //
    //    /**
    //     * 获取数据
    //     */
    //    public static List<Map> getData(){
    //        List<Map> list = new ArrayList<>();
    //        if(!"Linux".equals(OSinfo.getOSname())){
    //            final CountDownLatch latch = new CountDownLatch(5);
    //            threadPoolTaskExecutor.submit(new Runnable() {
    //                @Override
    //                public void run() {
    //                    TestGetData.getJVM();
    //                    latch.countDown();
    //                }
    //            });
    //            threadPoolTaskExecutor.submit(new Runnable() {
    //                @Override
    //                public void run() {
    //                    Map linux = TestGetData.getOpenFiles("192.168.134.100", "root", "root", 22, "ulimit -a");
    //                    list.add(linux);
    //                    latch.countDown();
    //                }
    //            });
    //            threadPoolTaskExecutor.submit(new Runnable() {
    //                @Override
    //                public void run() {
    //                    Map mysql = TestGetData.getMysql("192.168.134.100", "root", "root", 22, "cat /etc/my.cnf");
    //                    list.add(mysql);
    //                    latch.countDown();
    //                }
    //            });
    //            threadPoolTaskExecutor.submit(new Runnable() {
    //                @Override
    //                public void run() {
    //                    Map redis = TestGetData.getRedis("192.168.134.100", "root", "root", 22, "cat redis.conf", "/usr/local/redis/bin/redis-cli info clients");
    //                    list.add(redis);
    //                    latch.countDown();
    //                }
    //            });
    //            threadPoolTaskExecutor.submit(new Runnable() {
    //                @Override
    //                public void run() {
                        Map tomcat = TestGetData.getXml("G:\\Tomcat\\PersonalTomcat\\OrdinaryTomcat\\apache-tomcat-9.0.27\\conf\\server.xml");
                        list.add(tomcat);
    //                    latch.countDown();
    //                }
    //            });
    //        }
    //        return list;
    //    }
    //
    //
    //
    //    /**
    //     * 远程 执行命令并返回结果调用过程 是同步的(执行完23才会返回)
    //     * @param host    主机名
    //     * @param user    用户名
    //     * @param psw    密码
    //     * @param port    端口
    //     * @param command    命令
    //     * @return
    //     */
    //    public static Map exec(String host,String user,String psw,int port,String command){
    //        String result="";
    //        Session session =null;
    //        ChannelExec openChannel =null;
    //        Map<String, String> map = new HashMap<>();
    //        try {
    //            JSch jsch=new JSch();
    //            session = jsch.getSession(user, host, port);
    //            java.util.Properties config = new java.util.Properties();
    //            config.put("StrictHostKeyChecking", "no");
    //            session.setConfig(config);
    //            session.setPassword(psw);
    //            session.connect();
    //            openChannel = (ChannelExec) session.openChannel("exec");
    //            openChannel.setCommand(command);
    //            openChannel.connect();
    //            InputStream in = openChannel.getInputStream();
    //            BufferedReader reader = new BufferedReader(new InputStreamReader(in));
    //            String buf = null;
    //            while ((buf = reader.readLine()) != null) {
    //                String data = new String(buf.getBytes("UTF-8"),"UTF-8");
    //                result+= data +"\r\n";
    //                if(buf.contains("open files")){
    //                    map.put("openFiles",data);
    //                }
    //                if(buf.contains("soft nofile")){
    //                    map.put("softNofile",data);
    //                }
    //                if(buf.contains("hard nofile")){
    //                    map.put("hardNofile",data);
    //                }
    //                if(buf.contains("max_connections")){
    //                    map.put("maxConnections",data);
    //                }
    //                if(buf.contains("innodb_buffer_pool_size")){
    //                    map.put("innodbBufferPoolSize",data);
    //                }
    //                if(buf.contains("timeout")){
    //                    map.put("timeout",data);
    //                }
    //                if(buf.contains("connected_clients")){
    //                    map.put("connectedClients",data);
    //                }
    //            }
    //        } catch (JSchException | IOException e) {
    //            result+=e.getMessage();
    //        }finally{
    //            if(openChannel!=null&&!openChannel.isClosed()){
    //                openChannel.disconnect();
    //            }
    //            if(session!=null&&session.isConnected()){
    //                session.disconnect();
    //            }
    //        }
    //        map.put("all",result);
    //        return map;
    //    }
    //
    //    public static void getJVM(){
    //        MemoryMXBean memorymbean = ManagementFactory.getMemoryMXBean();
    //        System.out.println("堆内存信息: " + memorymbean.getHeapMemoryUsage());
    //        System.out.println("方法区内存信息: " + memorymbean.getNonHeapMemoryUsage());
    //
    //        List<String> inputArgs = ManagementFactory.getRuntimeMXBean().getInputArguments();
    //        System.out.println("\n#####################运行时设置的JVM参数#######################");
    //        System.out.println(inputArgs);
    //
    //        System.out.println("\n#####################运行时内存情况#######################");
    //        long totle = Runtime.getRuntime().totalMemory();
    //        System.out.println("总的内存量 [" + totle + "]");
    //        long free = Runtime.getRuntime().freeMemory();
    //        System.out.println("空闲的内存量 [" + free + "]");
    //        long max = Runtime.getRuntime().maxMemory();
    //        System.out.println("最大的内存量 [" + max + "]");
    //    }
    //
    //
    //
    //    public static Map getRedis(String host,String user,String psw,int port,String conf,String info){
    //        Map map = exec(host, user, psw, port, conf);//"cat redis.conf"
    //        Map<String, String> hashMap = new HashMap<>();
    //        if(!CollectionUtils.isEmpty(map)){
    //            String timeoutStr = (String) map.get("timeout");
    //            if(!StringUtils.isEmpty(timeoutStr)){
    //                hashMap.put("timeout ",timeoutStr);
    //            }else {
    //                hashMap.put("timeout ","0");
    //            }
    //        }
    //        Map clients = exec(host, user, psw, port, info);//"/usr/local/redis/bin/redis-cli info clients"
    //        String connectedClients  = getInt(((String)clients.get("connectedClients")));
    //        hashMap.put("connectedClients",connectedClients);
    //        return hashMap;
    //    }
    //
    //    /**
    //     * 获取mysql参数
    //     * @return
    //     */
    //    public static Map getMysql(String host,String user,String psw,int port,String command){
    //        Map map = exec(host, user, psw, port, command);//"cat /etc/my.cnf"
    //        Map<String, String> hashMap = new HashMap<>();
    //        if(!CollectionUtils.isEmpty(map)){
    //            String maxConnections = getInt(((String)map.get("maxConnections")));
    //            if(StringUtils.isEmpty(maxConnections)){
    //                maxConnections = "0";
    //                hashMap.put("maxConnections",maxConnections);
    //            }
    //            String innodbBufferPoolSize = getInt((String)map.get("innodbBufferPoolSize"));
    //            if(StringUtils.isEmpty(innodbBufferPoolSize)){
    //                innodbBufferPoolSize = "0";
    //                hashMap.put("innodbBufferPoolSize",innodbBufferPoolSize);
    //            }
    //        }
    //        return hashMap;
    //    }
    //
    //    /**
    //     * 获取打开的最大文件数
    //     * @return
    //     */
    //    public static Map getOpenFiles(String host,String user,String psw,int port,String ulimit){
    //        Map<String, String> hashMap = new HashMap<>();
    //        Map map = exec(host, user, psw, port, ulimit);//ulimit -a
    //        String openFiles = (String) map.get("openFiles");
    //        hashMap.put("openFiles",openFiles);
    //        return hashMap;
    //    }
    //
    //    /**
    //     * 获取nofile
    //     * @param host
    //     * @param user
    //     * @param psw
    //     * @param port
    //     * @param noFile
    //     * @return
    //     */
    //    public static Map getNofile(String host,String user,String psw,int port,String noFile){
    //        Map<String, String> hashMap = new HashMap<>();
    //        Map exec = exec(host, user, psw, port, noFile);//"cat /etc/security/limits.conf"
    //        String hardNofile = getInt((String)exec.get("hardNofile"));
    //        hashMap.put("hardNofile",hardNofile);
    //        String softNofile = getInt((String)exec.get("softNofile"));
    //        hashMap.put("softNofile",softNofile);
    //        return hashMap;
    //    }
    //
    //    /**
    //     * 获取数字
    //     * @param str
    //     * @return
    //     */
    //    private static String getInt(String str){
    //        String regEx="[^0-9]";
    //        Pattern p = Pattern.compile(regEx);
    //        Matcher m = p.matcher(str);
    //        return m.replaceAll("").trim();
    //    }
    }

pom.xml

    <!--远程连接linux建立SSH连接-->
    <dependency>
        <groupId>com.jcraft</groupId>
        <artifactId>jsch</artifactId>
        <version>0.1.46</version>
    </dependency>