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초 동안 기다리십시오.