JSCH setCommand无法正常工作

时间:2015-11-19 15:49:41

标签: jsch

没有异常,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));
        }

1 个答案:

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

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