Ваша проблема вызвана тем, что sudo выводит на поток ошибок. Это происходит:
blockquote>curlProc1 = Runtime.getRuntime().exec(command1);
- Ваша программа запускается sudo
- Поскольку sudo по умолчанию работает на базе терминалов, он выдает либо «sudo : no tty присутствует и не указывается запрошенная программа "или" Пароль: "по
stderr
blockquote>while ((outputString1 = curlIn1.readLine()) != null) {
- Ваша программа ждет ввода на
stdout
- Поскольку вы никогда не читаете stderr, sudo никогда не закончится, и, следовательно, sudo никогда не закроет stdout, поэтому ваша программа останется застрявшей
. Один быстрый способ исправить это с помощью конструктора процессов , у него есть полезная опция для объединения как
stderr
, так иstdout
в одном потоке, что означает, что вам нужен только один поток для чтения потока , и сохраняя ваш код простым.ProcessBuilder pb = new ProcessBuilder("sudo", "openvpn", "--config", "/etc/openvpn/configFile"); pb.redirectErrorStream(true); Process curlProc1 = pb.start(); ....
Поскольку есть вероятность, что sudo запросит пароль (, вы можете настроить его, чтобы попросить его вместо того, чтобы давать ошибку ), вы можете указать пароль, записав входной поток процесса после , получив приглашение пароля:
p.getOutputStream().write("correct battery horse staple\n".getBytes(STandardCharsets.UTF_8));
Согласно документации JMeter:
Запрос JDBC
Этот образец позволяет отправлять запрос JDBC ( запрос SQL ) в базу данных.
blockquote>В вашем случае есть несколько запросов различной природы, которые не могут быть выполнены за один раз. Таким образом, параметры находятся в:
- Разделить оператор на отдельные запросы, чтобы сэмплер JDBC Request выполнял только один запрос
- Преобразуйте ваш запрос в хранимую процедуру и выполните его, используя
Callable Statement
- Используйте операторы BEGIN и END для указания логических блоков
- Перейдите к JSR223 Sampler и напишите свой запросы на языке Groovy (однако вам все равно придется разделить его, как предложено в пункте 1, и использовать функцию execute () для частей, которые не дают результатов, и executeQuery) для частей, которые делают.