2010-07-01 21 views

risposta

5

ho rinunciato a JSch - e la sua API incredibilmente inutile e passato a:

http://www.cleondris.ch/opensource/ssh2/

(Ganimede SSH2). Faccio molto con ssh nella JVM e nei mesi di utilizzo di 24 ore ganimede si è dimostrato molto più affidabile. E più piacevole. La mia principale lamentela rimanente riguarda l'apparente impossibilità di impostare i timeout per SCP.

+0

ho anche bruciato da JSch ed è terribile api e i loro documenti: "... e solo dopo che il canale è stato chiuso (più esattamente, appena prima che il canale sia chiuso)." – Tnem

4

ho sofferto lo stesso problema e quindi mi sono imbattuto in questo nel changelog JSch (http://www.jcraft.com/jsch/ChangeLog):

  • funzione: Aggiunto 'Channel.isClosed ()'. Channel.getExitStatus() deve essere invocato dopo Channel.isClosed() == true.

Così bussò questo fino: deve essere chiamato prima channel.disconnect(), altrimenti ancora ottenere -1 problema:

private static void waitForChannelClosure(ChannelExec ce, long maxwaitMs) { 

    log.info("waitForChannelClosure >>>"); 
    final long until = System.currentTimeMillis() + maxwaitMs; 

    try { 
     while (!ce.isClosed() && System.currentTimeMillis() < until) { 
      log.info("SFTP channel not closed .. waiting"); 
      Thread.sleep(250); 
     } 

    } catch (InterruptedException e) { 
     throw new RuntimeException("Interrupted", e); 
    } 

    if (!ce.isClosed()) { 
     throw new RuntimeException("Channel not closed in timely manner!"); 
    } 

}; 
+0

Buono a sapersi! ma probabilmente non si torna indietro. Ci sono alcune altre opzioni là fuori (checkout jclouds per loro) –

Problemi correlati