応答がある場合、または一定時間が経過しても応答しない場合は、プロセスを停止する方法

応答がある場合、または一定時間が経過しても応答しない場合は、プロセスを停止する方法

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秒間待ってください。

関連情報