【发布时间】:2015-02-17 22:48:14
【问题描述】:
我正在开发一个项目,以使用 JSch 在远程服务器的屏幕上重新启动某些内容...但是我遇到了问题。它将 100% 的时间发送前 2 个命令,但仅在某些时候发送第 3 个命令。任何帮助将不胜感激。
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();
}
}
这会在 100% 的情况下发送 screen -x 'name' 和 stop 从我所看到的情况来看,但 'quit' 命令实际上只在一小部分时间内被控制台发送/理解。任何帮助将不胜感激!
【问题讨论】: