我通过 java 安全通道与远程服务器建立连接,在远程服务器上运行 Java 应用程序。我的应用程序在远程服务器上执行 shell 脚本并从中获取结果。然后我的应用程序再次与另一个远程服务器建立连接,然后从中获取结果。但是,如果有时命令没有在第一个远程服务器上执行,那么我的 java 应用程序将继续等待。所以我的问题是如何告诉我的java应用程序不要在一定时间后等待并与另一个远程服务器建立连接。帮助将不胜感激。
我正在执行以下命令并尝试从远程服务器获取结果
echo stat | nc hostname.com 2181
如果命令 nc 已从远程服务器卸载,我的应用程序等待的时间将超出我的预期。那么如何解决这个问题
我的意思是在一段时间后它必须关闭与远程服务器的连接并开始与其他远程服务器连接并尝试在该服务器上执行 shell 脚本。
我使用下面的代码连接到远程服务器
JSch jsch = new JSch();
Session session = null;
Channel channel = null;
StringBuilder log = new StringBuilder();
String response = null;
String response1 = null;
try {
session = jsch.getSession(username, host, port);
session.setPassword(password);
session.setConfig(HOST_KEY_CHECKING, hostKey);
session.setConfig("PreferredAuthentications", "publickey,keyboard-interactive,password");
session.connect();
// check if connect was successful
if (session.isConnected()) {
System.out.println("Connected sucessfully to server :" + host);
channel = session.openChannel(EXCUTE_CHANNEL);
((ChannelExec) channel).setCommand(command10);
// channel.setInputStream(System.in);
channel.setInputStream(null);
((ChannelExec) channel).setErrStream(System.err);
InputStream in = channel.getInputStream();
channel.connect();
response = IOUtils.toString(in);
} else {
System.out.println("Connection Failed" + host);
}
} catch (JSchException e) {
System.out.println("Connection Failed" + host + " Error:" + e.getMessage());
e.printStackTrace();
} catch (Exception e) {
System.out.println("Connection Failed" + host + " Error:" + e.getMessage());
e.printStackTrace();
}
System.out.println( "First Response received :"+ response);
return response;
答案1
您可以使用超时命令。
timeout 10s echo stat | nc hostname.com 2181
等待 10 秒钟,然后继续进行该过程。