Eu corro isso:
ssh -t -vvv -i ~/.ssh/druid-keypair -o StrictHostKeyChecking=no ubuntu@${INSTANCE_ADDRESS} <<EOI
# Setup Oracle Java
...
# Install dependencies - mysql must be built from source, as the 12.04 apt-get hangs
export DEBIAN_FRONTEND=noninteractive
sudo debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password password diurd'
sudo debconf-set-selections <<< 'mysql-server-5.5 mysql-server/root_password_again password diurd'
sudo apt-get -q -y -V --force-yes --reinstall install mysql-server-5.5
echo "ALL DONE with druid environment setup!"
exit
EOI
Nota: Eu tentei com e sem -t no ssh.
A saída de depuração de -vvv é esta:
...
ldconfig deferred processing now taking place
ALL DONE with druid environment setup!
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
E então o processo fica lá para sempre. Por que o comando ssh não termina? Eu tentei com -t e sem e tentei com a saída e sem. Não faz diferença :(
Atualização: Quando eu digito 'jobs' no final do script, vejo:
JOBS:
[1]- Running nohup bin/zookeeper-server-start.sh config/zookeeper.properties 2>&1 > /dev/null &
[2]+ Running nohup bin/kafka-server-start.sh config/server.properties 2>&1 > /dev/null &
Como posso executar esses serviços e ainda ter uma sessão ssh que termina?
Atualização: agora eu nego manualmente esses processos. A coisa ainda não sai. Companheiro WTF?
Atualização: Ao executar linha por linha, dois comandos não retornam ao shell sem pressionar o CR:
nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
nohup bin/kafka-server-start.sh config/server.properties &
Respostas:
Normalmente, as sessões do terminal SSH são interrompidas se ainda houver conexões em segundo plano ainda abertas. Por conexões em segundo plano, quero dizer coisas como:
Dê uma olhada nas conexões que ainda estão ativas na sua sessão SSH travada, digitando
~#
seu terminal SSH travado.Pode ser que seu script esteja abrindo sessões que você não percebeu. Ou as configurações do terminal da sua máquina remota, como
.profile
(ou.bashrc
etc.), podem ter algo que estabelece uma sessão. Boa sorte caçando!A propósito, algumas das outras seqüências de escape oferecidas pelos clientes OpenSSH também podem ser úteis:
Outra coisa, se você deseja que o seu SSH execute seus comandos e saia imediatamente - ou seja, você não deseja uma sessão de terminal remoto - pode usar a
-f
opção parassh
. Isso forçará a conexão SSH a ser um trabalho em segundo plano.fonte
-f
funciona para mim.background connection
e podedisown
o processo em segundo plano para que a conexão ssh não seja interrompida?