需求一:使用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>