Processo Java trava com .exec e ssh

1

EDIT: Eu acredito que o problema é que a conexão ssh está criando conexões em segundo plano que ainda estão abertas (cf. link ). Eu rodaria ssh com o -f flag, mas preciso ter certeza de que o java está instalado. Existe uma maneira fácil de forçar a conexão a fechar a partir do próprio script?

N.B., a máquina remota está no Ubuntu 14.04.

Estou usando uma ferramenta escrita em Clojure que chama o Runtime.getRuntime().exec() do Java da seguinte forma:

Runtime.getRuntime().exec("ssh", "-o", "StrictHostKeyChecking=no",
    "user@host", "sudo su -");'

E então, com o java.lang.Process criado a partir disso, recebo o stdin e escrevo o conteúdo de um arquivo para ele, basicamente, .flush e .close do gravador. Tudo funciona bem; há muitos deles, todos acontecendo sem problemas, mas eu tenho um perto do começo que executa um script que se parece com isso:

if [ ! $(which java) ]; then
    apt-get update -q
    apt-get install -y openjdk-7-jre
fi

E quando eu ssh manualmente no nó, vejo que o Java é instalado com sucesso e o processo é encerrado. Mas, por algum motivo, isso não está sendo comunicado ao código de chamada (ou seja, o processo java acima).

Eu mencionei antes que há muitos deles, e nenhum deles está suspenso. Eu tenho scripts que fazem todos os tipos de coisas, mas também outros que fazem quase a mesma coisa que a anterior, a única diferença é que eles instalam softwares diferentes (como o git), e eles não param.

Então eu tentei fazer isso manualmente; ou seja, indo para um shell e digitando:

ssh -o StrictHostKeyChecking=no -o ubuntu@somehost sudo su -

e depois colando o script lá, e tudo funciona muito bem.

Não tenho certeza do que poderia estar causando isso.

    
por tjb1982 21.11.2015 / 15:37

0 respostas

Tags