оставление процесса Java Linux для управления пользователем или ОС - PullRequest
0 голосов
/ 03 мая 2011

Код:

        String line;
        ProcessBuilder telnetProcessBuilder = new ProcessBuilder("/bin/bash");
        telnetProcessBuilder.redirectErrorStream(true);
        Process telnetProcess = telnetProcessBuilder.start();
        BufferedReader input = new BufferedReader(new InputStreamReader(telnetProcess.getInputStream()));
        BufferedWriter output = new BufferedWriter(new OutputStreamWriter(telnetProcess.getOutputStream()));
        output.write("telnet <hostname> -l <username>\n");
        output.flush();
        output.write("<password>\n");
        output.flush();
        output.write("cd <path>\n");
        output.flush();
        output.write("<script-file1>\n");
        output.flush();
        output.write("<script-file2>\n");
        output.flush();
        output.write("\n");
        output.flush();
        while((line = input.readLine())!= null)
        {
            System.out.println(line);
            if(line.indexOf("<some final text after <script-file2>>")>-1)
            {
                line = input.readLine();
                System.out.println(line);
                break;
            }
        }
        output.close();
        input.close();
        //output.write("exit\n");
        //output.flush();
        //telnetProcess.destroy();

В соответствии с приведенным выше кодом java запускает процесс linux / bin / bash, а затем подключается к удаленным системам, где выполняет несколько сценариев для приложения, а затем должен оставить оба ввода,выходные потоки и управление процессом / bin / bash для пользователя и выход с кодом 0.

Теперь, после создания jar-файла, я буду вызывать его из терминала команды linux (GNOME), а затем процесс должен оставить контроль над собой и IOПотоки передаются пользователю в конце кода Java (его выполнение), где пользователь вводит некоторые команды, такие как состояние системы и диагностика, или завершает работу при вводе определенных символов, которые зависят от приложения. Это требование.

Но проблемаЯва выходит из последней строки и так процесс, даже если я не выйти или не уничтожить процесс.Да, это естественное поведение, но может кто-нибудь сказать мне, как я могу достичь этого, если кто-то уже сталкивался с проблемой?ну, я не могу показать, что является содержимым файлов сценариев и других вещей, которые могут вам понадобиться, поскольку его компания принадлежит.

Спасибо за ответы

Ашутош

1 Ответ

0 голосов
/ 03 мая 2011

Я думаю, что ваше Java-приложение завершается сразу после последней строки script-file2, фактически это условие if внутри вашего цикла while.

Если я правильно понимаю, вы хотите, чтобы ваше java-приложение (1) открывало соединение telnet с удаленным компьютером, (2) автоматически выдавало какую-то команду, затем (3) позволяло пользователю вводить другие команды вручную и, наконец, (4 ) закройте соединение telnet, когда пользователь даст команду выхода. Я думаю, (1) и (2) сделаны и работают в вашем коде. В этот момент, я полагаю, вам нужно создать некоторый пользовательский интерфейс для вашего приложения, где пользователь вводит команды, и вы передаете эти команды в ваш процесс telnet (так же, как вы делаете для начальных команд, используя output.write(userCommand); output.flush();, и вы продолжаете делать это, пока команда, введенная пользователем, не будет exit (или что-то еще).

...