Como parar o processo se ele está respondendo ou não está respondendo após certo tempo

2

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;
    
por Manikya 02.09.2016 / 13:58

1 resposta

0

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.

    
por 02.09.2016 / 14:24

Tags