Você pode usar o comando de tempo limite.
timeout 10s echo stat | nc hostname.com 2181
Isso aguarda 10 segundos e depois prossegue com os procedimentos.
Estou executando um aplicativo Java em um servidor remoto, estabelecendo uma conexão com o servidor remoto por meio do canal seguro do java. Meu aplicativo executa um script de shell em um servidor remoto e obtém o resultado disso. Então, novamente meu aplicativo faz conexão com outro servidor remoto, em seguida, obtém resultado disso. Mas, se às vezes os comandos não estiverem sendo executados no primeiro servidor remoto, meu aplicativo java continuará aguardando. Então, minha pergunta é como dizer ao meu aplicativo java para não esperar depois de um certo tempo e fazer conexão com outro servidor remoto. Ajuda será apreciada.
Estou executando o comando abaixo e tentando obter resultado do servidor remoto
echo stat | nc hostname.com 2181
Se no caso o comando nc foi desinstalado do servidor remoto, meu aplicativo está esperando mais do que eu esperava. Então, como resolver isso
Quero dizer, depois de um tempo, ele precisa fechar a conexão com o servidor remoto e começar a se conectar com outro servidor remoto e tentar executar scripts de shell nesse servidor.
O código abaixo que estou usando para se conectar ao servidor remoto
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;
Você pode usar o comando de tempo limite.
timeout 10s echo stat | nc hostname.com 2181
Isso aguarda 10 segundos e depois prossegue com os procedimentos.