응답이 있거나 일정 시간이 지난 후에도 응답하지 않는 경우 프로세스를 중지하는 방법

응답이 있거나 일정 시간이 지난 후에도 응답하지 않는 경우 프로세스를 중지하는 방법

Java 보안 채널을 통해 원격 서버와 연결을 설정하고 원격 서버에서 Java 애플리케이션을 실행합니다. 내 응용 프로그램은 원격 서버에서 쉘 스크립트를 실행하고 그로부터 결과를 얻습니다. 그런 다음 내 응용 프로그램은 다시 다른 원격 서버와 연결을 설정하고 그 결과를 가져옵니다. 그러나 때때로 첫 번째 원격 서버에서 명령이 실행되지 않으면 내 Java 응용 프로그램이 계속 대기합니다. 그래서 내 질문은 내 Java 응용 프로그램이 특정 시간 후에 다른 원격 서버와 연결을 기다리지 않고 연결하도록 지시하는 방법입니다. 도움을 주시면 대단히 감사하겠습니다.

다음 명령을 실행하고 원격 서버에서 결과를 얻으려고 합니다.

echo stat | nc hostname.com 2181

nc 명령이 원격 서버에서 언로드되면 내 응용 프로그램이 예상보다 오래 기다립니다. 그렇다면 이 문제를 해결하는 방법

내 말은 얼마 후 원격 서버와의 연결을 닫고 다른 원격 서버와의 연결을 시작하고 해당 서버에서 쉘 스크립트를 실행해야 함을 의미합니다.

다음 코드를 사용하여 원격 서버에 연결합니다.

   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 명령을 사용할 수 있습니다.

timeout 10s echo stat | nc hostname.com 2181

프로세스를 계속하기 전에 10초 동안 기다리십시오.

관련 정보