2015-11-19 23 views
0

没有例外,Command也没有根据提到的命令做任何工作。这里没有创建目录的权限,目录也没有创建。请给出您的建议。JSCH setCommand不起作用

更新: channelexe.getExitStatus增加,但问题是,它提供了-1,这个又是什么意思?我不知道如何找到一些解释,为什么命令没有做它的工作(更新777模式fileDir1)。

 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)); 
     } 

回答

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()以获取远程命令的退出状态。如果chmodmkdir成功,则该值为0;如果失败,则值为非零。该通道还具有读取远程命令的标准错误的功能,这将允许您读取它们输出的任何错误消息。

JSCH网站有几个example programs,包括一个executing a remote command的例子。

+0

谢谢channelexe.getErrStream()有助于获得完整的跟踪。 – sunleo