2010-07-01 9 views
6

मैं अच्छी http://www.jcraft.com/jsch/ लाइब्रेरी का उपयोग कर रहा हूं - हालांकि जब मैं कुछ कमांड चलाता हूं, तो मुझे लगता है कि जेएसएच समय-समय पर एक getExitStatus -1 देता है, भले ही स्क्रिप्ट ठीक चलती है (जब मैं दौड़ता हूं हाथ से यह लगातार एक सफल 0 निकास कोड है)। कोई विचार?जेएसएच त्रुटि रिटर्न कोड संगत नहीं

उत्तर

5

मैं Jsch पर छोड़ दिया (आदेशों की एक विस्तृत विविधता के लिए हो रहा है) - और उसके अविश्वसनीय रूप से बेकार एपीआई और में स्विच:

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

(गेनीमेड SSH2)। मैं जेवीएम में एसएसएच के साथ बहुत कुछ करता हूं और 24 घंटे के उपयोग के महीनों में गैनीमेड ने अधिक विश्वसनीय साबित कर दिया है। और अधिक सुखद। मेरा मुख्य शेष गपशप एससीपी के लिए समय-समय पर सेट करने में असमर्थ है।

+0

मैं भी JSch द्वारा जला दिया गया है और यह भयानक एपीआई और उनके दस्तावेज़: "... और चैनल बंद होने के बाद ही (चैनल ठीक होने से ठीक पहले)।" – Tnem

4

मैं एक ही मुद्दे का सामना करना पड़ा और उसके बाद Jsch बदलाव का (http://www.jcraft.com/jsch/ChangeLog) में यह भर में आया था: (जोड़ा 'Channel.isClosed:

  • सुविधा) '। Channel.getExitStatus() होना चाहिए। Channel.isClosed() == सत्य के बाद बुलाया जाना चाहिए।

तो यह खटखटाया: और अभी भी मिल -1 मुद्दा, channel.disconnect() से पहले कॉल किया जाना चाहिए:

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

जानना अच्छा है! लेकिन शायद वापस स्विच नहीं कर रहा है। वहां कुछ अन्य विकल्प हैं (उनके लिए चेकआउट jclouds) –

संबंधित मुद्दे