2015-11-19 3 views
0

Отсутствует Исключение, и команда также не выполняет какую-либо работу, основанную на упомянутой команде. Поэтому допустим, что каталог не создан и каталог также не создан. Пожалуйста, дайте свое предложение.JSCH setCommand не работает

Update: 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(); 

A ChannelExec принимает одну строку команды для вызова на удаленной системе. Второй вызов setCommand() отбрасывает команду chmod и заменяет ее командой mkdir. Предполагая удаленную оболочку Баша или подобный, вы могли бы использовать синтаксис оболочки, чтобы построить командную строку, которая запускает обе команды:

String cmd = "chmod 777 -R " + depDir + " && mkdir /usr/local/fileStore"; 
channelexe.setCommand(cmd); 

Исключения не приходит ...

ChannelExec Безразлично» t генерирует исключение, когда команда просто терпит неудачу. Вы можете позвонить Channel.getExitStatus(), чтобы получить статус выхода удаленной команды. Значение будет 0, если chmod и mkdir преуспели или были ненулевыми, если они не удались. Канал также имеет функции для чтения стандартной ошибки удаленной команды, которая позволит вам читать любые сообщения об ошибках, которые они выводят.

На веб-сайте АОH имеется несколько example programs, включая пример executing a remote command.

+0

Спасибо, что channelelexe.getErrStream() был полезен для получения полного следа. – sunleo