Я выполняю некоторые команды, используя SSHJ, я делаю это с помощью этого метода:
private Command executeCommand(String command, SSHClient client) {
Command commandObject = client.startSession().exec(command);
commandObject.join();
return commandObject;
}
Он работает хорошо, пока я не выполню эту команду:
cd $SOLR; nohup java -Dsolr.solr.home=./solr -DSTOP.PORT=8079 -DSTOP.KEY=stopkey -jar start.jar 2> logs/solr.log &
В этом случае вся программа зависает
commandObject.join();
Конечно, процесс, который он запускает, запущен. Также сразу же возвращается та же строка, выполненная из оболочки.
Любая идея, почему и как это преодолеть?
РЕДАКТИРОВАТЬ: то же самое происходит, когда я не присоединяюсь к(), а читаю sysout команды (с commons-io):
IOUtils.toString(commandObject.getInputStream()))
2>&1
перед последним амперсандом. Хотя у меня аналогичная проблема с другой командой, так что, вероятно, это не решит ее полностью. - person bstempi   schedule 24.01.2014commandObject.join()
без тайм-аута. Это блокирует текущий поток для ожидания уведомления. Если вызываемая программа зависает, основной поток также зависает. - person Boyan   schedule 16.02.2016