Yo corro esto:
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: He intentado con y sin -t en ssh.
La salida de depuración de -vvv es 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
Y luego el proceso se queda allí para siempre. ¿Por qué no termina el comando ssh? He intentado con -t y sin, y he intentado con la salida y sin. No hace la diferencia :(
Actualización: cuando escribo 'jobs' al final del script, veo:
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 &
¿Cómo puedo ejecutar estos servicios y aún tener una sesión ssh que finaliza?
Actualización: ahora desconozco manualmente estos procesos. La cosa aún no sale. WTF compañero?
Actualización: Al ejecutar línea por línea, dos comandos no regresan al shell sin presionar CR:
nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
nohup bin/kafka-server-start.sh config/server.properties &
Respuestas:
Por lo general, las sesiones de terminal SSH se bloquean si todavía hay conexiones en segundo plano abiertas. Por conexiones de fondo, me refiero a cosas como:
Eche un vistazo a las conexiones que aún están activas en su sesión SSH colgada escribiendo
~#
su terminal SSH colgado.Podría ser que su guión esté abriendo sesiones de las que no se dio cuenta. O las configuraciones de terminal de su máquina remota como
.profile
(o.bashrc
, etc.) pueden tener algo que establezca una sesión. Buena suerte cazando!Por cierto, algunas de las otras secuencias de escape que ofrecen los clientes OpenSSH también pueden ser útiles:
Otra cosa, si desea que su SSH solo ejecute sus comandos y salga inmediatamente, es decir, no desea una sesión de terminal remota, puede usar la
-f
opción parassh
. Eso obligará a la conexión SSH a ser un trabajo en segundo plano.fuente
-f
funciona para mi.background connection
y puede unodisown
el proceso en segundo plano para que la conexión ssh no se bloquee?