【发布时间】:2019-03-02 12:47:41
【问题描述】:
我努力让它工作,但最终让脚本在远程 unix 服务器上执行命令(执行 sh 脚本)。我正在尝试执行第二个命令,并在创建新频道或使用相同频道时不断收到错误。
try {
((ChannelExec) channel).setCommand(command);
PrintStream out= new PrintStream(channel.getOutputStream());
InputStream in = channel.getInputStream();
channel.connect();
BufferedReader scriptReader= new BufferedReader(new InputStreamReader(in));
scriptOutput = scriptReader.readLine();
sb = new StringBuilder();
while ((scriptOutput = scriptReader.readLine())!= null) {
sb.append(scriptOutput + "\n");
这是通道执行的第一个 sn-p 工作正常。现在下一个方法 sn-p 在消费完上述输入流后立即被调用:
try {
StringBuilder sb = new StringBuilder();
command = new_command;
((ChannelExec) channel).setCommand(command);
InputStream in = channel.getInputStream();
channel.connect();
BufferedReader scriptReader= new BufferedReader(new InputStreamReader(in));
scriptOutput = scriptReader.readLine();
//StringBuilder sb = new StringBuilder();
for(int c=0; c < consumerList.size(); c++){
....
现在返回以下错误:
com.jcraft.jsch.JSchException: channel is not opened.
现在,如果我创建一个具有相同会话的新频道,我会从返回的流中得到一个空响应。我确实在远程 shell 中测试了该命令,它工作正常:
int counter = 0;
Channel channelII = session.openChannel("exec");
try {
StringBuilder sb = new StringBuilder();
command = new_command;
((ChannelExec) channelII).setCommand(command);
InputStream in = channelII.getInputStream();
channelII.connect();
BufferedReader scriptReader= new BufferedReader(
new InputStreamReader(in));
scriptOutput = scriptReader.readLine();
第二条命令如下,我希望能够为不同的消费者群体重复执行它:
/usr/kafka/bin/kafka-consumer-groups.sh --bootstrap-server
192.xxx.xx.xxx:9092 --describe -group consumergroup1
编辑:
第二条命令的响应:
TOPIC PARTITION CURRENT-OFFSET LOG-END-OFFSET
LAG CONSUMER-ID HOST
CLIENT-ID
output.influxDB 1 94919 2781796
2686877 - -
-
output.influxDB 0 94919 2781798
2686879 - -
-
output.influxDB 2 94918 2781795
2686877 - -
-
【问题讨论】:
-
您尝试远程执行的 2 个命令是什么?
-
您可以在一行中设置两个命令,以
\n分隔。例如:command = cd /home \npwd \n -
第一个命令是什么?它是否与后一个命令有关?您是否尝试读取错误流?
-
我需要第一个命令的输出来运行第二个命令:第一个命令 - kafka/bin/kafka-consumer-groups.sh --bootstrap-server 192.xxx.xx.xxx:9092 - -list --> 这将为我提供消费者组列表,然后我可以将其单独用于下一个命令 - kafka/bin/kafka-consumer-groups.sh --bootstrap-server 192.xxx.xxxxx:9092 - -describe -group ????
-
好的,但是即使没有第一个命令,第二个命令 也可以使用,对吗? (你认识这个小组吗)
标签: java unix apache-kafka jsch