Не возвращаются коды возврата ошибок JSCH - PullRequest
6 голосов
/ 01 июля 2010

Я использую красивую библиотеку http://www.jcraft.com/jsch/ - однако, когда я запускаю некоторые команды, я вижу, что время от времени jsch возвращает getExitStatus, равный -1, даже если скрипт работает нормально (когда я его запускаю вручную это всегда успешный 0 код выхода). Есть идеи?

(похоже, это происходит с самыми разными командами)

Ответы [ 2 ]

5 голосов
/ 29 октября 2010

Я отказался от Jsch - и его невероятно бесполезного API и переключился на:

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

(Ганимед SSH2). Я делаю много с ssh в JVM, и за месяцы 24-часового использования ганимед оказался гораздо более надежным. И еще приятнее. Моя главная оставшаяся проблема в том, что я не могу устанавливать тайм-ауты для SCP.

4 голосов
/ 14 декабря 2011

Я столкнулся с той же проблемой, а затем столкнулся с этим в журнале изменений Jsch (http://www.jcraft.com/jsch/ChangeLog):

  • : добавлено Channel.isClosed (). Channel.getExitStatus () должен вызываться послеChannel.isClosed () == true.

Итак, это сбито с толку: необходимо вызвать до channel.disconnect (), в противном случае по-прежнему возникает ошибка -1:

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

};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...