gpt4 book ai didi

java - JSch - 命令没有发送到 shell?

转载 作者:行者123 更新时间:2023-12-02 04:58:08 27 4
gpt4 key购买 nike

我正在开发一个项目,使用 JSch 在远程服务器上的屏幕中重新启动某些内容...但是我遇到了问题。它会在 100% 的情况下发送前 2 个命令,但第三个命令只会在某些情况下发送。任何帮助将不胜感激。

public static void stopServer(String name, String ip, String passwd)
{
try {
Session session = Main.jsch.getSession("user",ip,22);
session.setConfig("StrictHostKeyChecking", "no");
session.setPassword(passwd);
session.connect();
Channel channel = session.openChannel("shell");
channel.connect();
ChannelShell cs = (ChannelShell) channel;
cs.setPty(true);
DataInputStream dataIn = new DataInputStream(channel.getInputStream());
PrintStream dataOut = new PrintStream(channel.getOutputStream());
dataOut.println("screen -x "+name);
dataOut.flush();
dataOut.println("stop");
dataOut.flush();
String line = dataIn.readLine();
System.out.println(line);
while(true) {
line = dataIn.readLine();
System.out.println(line);
if(line.contains("\"quit\""))
{
break;
}
}
TimeUnit.SECONDS.sleep(1);
dataOut.println("quit");
dataOut.flush();
System.out.println("Shutdown");
dataIn.close();
dataOut.close();
channel.disconnect();
session.disconnect();

}catch(Exception e)
{
e.printStackTrace();
}
}

根据我所见,这会发送屏幕 -x 'name' 和停止 100% 的时间,但 'quit' 命令实际上仅在一小部分时间内被控制台发送/理解。任何帮助将不胜感激!!

最佳答案

我设法以不使用 shell channel 的方式解决了这个问题,但它足够可靠,可以工作:

//Start EXEC
ChannelExec ce = (ChannelExec) session.openChannel("exec");
ce.setCommand("screen -S " + name + " -X stuff 'quit\n'");
ce.setInputStream(null);
ce.setErrStream(System.err);
InputStream in=ce.getInputStream();

ce.connect();

byte[] tmp=new byte[1024];
while(true){
while(in.available()>0){
int i=in.read(tmp, 0, 1024);
if(i<0)break;
//System.out.print(new String(tmp, 0, i));
}
if(ce.isClosed()){
if(in.available()>0) continue;
//System.out.println("exit-status: "+ce.getExitStatus());
break;
}
try{Thread.sleep(1000);}catch(Exception ee){}
}
ce.disconnect();
//STOP EXEC

尽管这并不符合问题的本质,但它为我解决了问题。

关于java - JSch - 命令没有发送到 shell?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28563339/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com