应用Ganymed SSH-2 for Java判断服务器状态:
之前的很多章节已经描述了如何运用Ganymed SSH-2 for Java的api,基本上主要的都进行过演示了。
下面,我将通过一个实际中很有帮助的一个功能点作为应用的开篇,讲述这个在实际工作中的意义。
一台服务器,如何判断其状态是否正常啦,及是否可以访问,在不想登录等操作的情况下,每隔一段时间探测一次服务状态,那么可以这样实现:
/** * 探测服务器状态 * * @param host * @param username * @param password * @param cmd * @param port * @return * @throws IOException */ public static String queryServerStatus(String host, String username, String password, String cmd, int port) throws IOException { if (logger.isInfoEnabled()) { logger.info("running SSH cmd [" + cmd + "]"); } Connection conn = null; Session sess = null; InputStream stdOut = null; String outStr = ""; try { conn = getOpenedConnection(host, username, password, port); sess = conn.openSession(); sess.execCommand(cmd); stdOut = new StreamGobbler(sess.getStdout()); outStr = FileWRUtil.inputStream2String(stdOut, ConstantsUtil.CHARSET); sess.waitForCondition(ChannelCondition.EXIT_STATUS, 60000); } finally { if (null != sess) { sess.close(); sess = null; } if (null != conn) { conn.close(); conn = null; } IOUtils.closeQuietly(stdOut); } return outStr; }
测试代码:
String cmd = "curl -o /dev/null -s -m 10 --connect-timeout 60 -w %{http_code} 'http://172.16.18.141:8080/Login.jsp'"; System.out.println(CommandRunner.queryServerStatus("172.16.18.141", "weblogic", "123456", cmd, 22));