没有异常,Command也没有根据提到的命令进行任何工作。这里没有创建目录,也没有创建目录。请给出你的建议。
更新 添加了channelexe.getExitStatus,但问题是它给-1,这是什么意思?我不知道如何找到一些解释为什么命令没有做到这一点(更新 fileDir1 的777模式)。
String depDir = "/usr/local/FTPReceive/DEPLOYED/fileDir1";
log.info("updateDepositedFilePermission ........ starts");
Session session = new FTPComponent().getSession("");
Channel channel = null;
ChannelSftp channelSftp = null;
try
{
session.connect();
System.out.println("session is alive:" + session.isConnected());
channel = session.openChannel("sftp");
channel.connect();
channelSftp = (ChannelSftp) channel;
ChannelExec channelexe = (ChannelExec) session.openChannel("exec");
channelexe.setCommand("chmod 777 -R " + depDir);
channelexe.connect();
System.out.println("channelexe.getExitStatus:"+channelexe.getExitStatus());
}
catch (Exception e1)
{
e1.printStackTrace();
System.out.println("Manual Exception in updateDepositedFilePermission:" + CommonUtil.getExceptionString(e1));
}
答案 0 :(得分:4)
channelexe.setCommand("chmod 777 -R " + depDir);
channelexe.setCommand("mkdir /usr/local/fileStore");
channelexe.connect();
ChannelExec接受在远程系统上调用的单个命令字符串。您对setCommand()
的第二次调用是丢弃chmod命令并将其替换为mkdir命令。假设远程shell是 bash 或类似的,您可以使用shell语法构造一个运行这两个命令的命令字符串:
String cmd = "chmod 777 -R " + depDir + " && mkdir /usr/local/fileStore";
channelexe.setCommand(cmd);
没有例外......
当命令失败时,ChannelExec不会抛出异常。您可以调用Channel.getExitStatus()
来获取远程命令的退出状态。如果chmod
和mkdir
成功,则值为0;如果失败,则值为非零。该通道还具有读取远程命令标准错误的功能,允许您读取它们输出的任何错误消息。
JSCH网站有几个example programs,包括executing a remote command的一个例子。