Как реализовать Java-класс будущего для достижения параллелизма, чтобы вызвать сценарий оболочки для нескольких одновременных соединений

Я использую будущий класс Java для достижения параллельного программирования. Я вызываю сценарий оболочки, как показано ниже. Я вызываю функцию ниже из моего контроллера Java

 String NodeResult=restartNodes(HostName);

В реализации контроллера будущего класса

 public static String restartNodes(final String hostName){
   ExecutorService executor = Executors.newFixedThreadPool(threadNum);
    List<FutureTask<Integer>> taskList = new  ArrayList<FutureTask<Integer>>();

    // Start thread for the first half of the numbers
    FutureTask<Integer> futureTask_1 = new FutureTask<Integer>(new Callable<Integer>() {
        @Override
        public Integer call() throws Exception {

            restartScript(hostName);


            return SUCCESS;
        }
    });
    taskList.add(futureTask_1);
    executor.execute(futureTask_1);
    return "successfully done";
}

код для вызова скрипта:

 public static void  restartScript(String hostName) {
    SSHExec ssh = null;

    // Wrap the whole execution jobs into try-catch block
    try {
        // Initialize a ConnBean object, parameter list is ip, username,
        // password

        ConnBean cb = new ConnBean(IP_Add, User_Name,
                Password);

        ssh = SSHExec.getInstance(cb);


        CustomTask ct2 = new ExecShellScript("/root/",
                "./restartScript.sh",""+ hostName+"" );

        // Connect to server
        ssh.connect();

        Result res = ssh.exec(ct2);
        // Check result and print out messages.
        if (res.isSuccess) {
            System.out.println("Return code in success: " + res.rc);
            System.out.println("sysout: " + res.sysout);

        } else {

            System.out.println("Return code: " + res.rc);
            System.out.println("error message: " + res.error_msg);
        }
    } catch (TaskExecFailException ex) {
        System.out.println(ex.getMessage());
        ex.printStackTrace();
    } catch (Exception e) {
        System.out.println(e.getMessage());
        e.printStackTrace();
    } finally {
        ssh.disconnect();
    }

 }

Я вызываю несколько сценариев, и я хочу, чтобы они выполнялись параллельно, но при выполнении я получаю ошибку ниже

 com.jcraft.jsch.JSchException: session is down
at com.jcraft.jsch.Session.openChannel(Session.java:752)
at net.neoremind.sshxcute.core.SSHExec.exec(SSHExec.java:164)
at com.controller.UserLoginController.isNodeLive(UserLoginController.java:1620)
at com.controller.UserLoginController$3.call(UserLoginController.java:1724)
at com.controller.UserLoginController$3.call(UserLoginController.java:1)
at java.util.concurrent.FutureTask.run(FutureTask.java:262)
at java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1145)
at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:615)
at java.lang.Thread.run(Thread.java:744)

Есть ли у них какой-либо максимальный предел для получения ssh-сессии, т.е. (параллельная сессия, так как я буду выполнять 5 таких сценариев с разной целью, и я хочу, чтобы все они пошли параллельно.) Если мы будем использовать будущий класс?

0 ответов

Другие вопросы по тегам