Je lance ceci:
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
Remarque: j'ai essayé avec et sans -t dans ssh.
La sortie de débogage de -vvv est la suivante:
...
ldconfig deferred processing now taking place
ALL DONE with druid environment setup!
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
Et puis le processus reste là pour toujours. Pourquoi la commande ssh ne se termine-t-elle pas? J'ai essayé avec -t et sans, et j'ai essayé avec la sortie et sans. Cela ne fait aucune différence :(
Mise à jour: lorsque je tape «jobs» à la fin du script, je vois:
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 &
Comment puis-je exécuter ces services tout en ayant une session ssh qui se termine?
Mise à jour: je renie maintenant manuellement ces processus. La chose ne sort toujours pas. Compagnon WTF?
Mise à jour: lors de l'exécution ligne par ligne, deux commandes ne reviennent pas au shell sans appuyer sur CR:
nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
nohup bin/kafka-server-start.sh config/server.properties &
Réponses:
En règle générale, les sessions de terminal SSH se bloquent s'il reste des connexions d'arrière-plan encore ouvertes. Par connexions d'arrière-plan, j'entends des choses telles que:
Jetez un œil aux connexions qui sont toujours actives sur votre session SSH bloquée en tapant
~#
votre terminal SSH suspendu.Il se peut que votre script ouvre des sessions que vous ne réalisiez pas. Ou les configurations de terminal de votre machine distante comme
.profile
(ou.bashrc
, etc.) peuvent contenir quelque chose qui établit une session. Bonne chance à la chasse!Soit dit en passant, certaines des autres séquences d'échappement proposées par les clients OpenSSH peuvent également être utiles:
Une autre chose, si vous voulez que votre SSH exécute simplement vos commandes et quitte immédiatement - c'est-à-dire que vous ne voulez pas de session de terminal distant - vous pouvez utiliser l'
-f
option pourssh
. Cela forcera la connexion SSH à être un travail d'arrière-plan.la source
-f
travaille pour moi.background connection
et peut-il êtredisown
le processus d'arrière-plan afin que la connexion ssh ne se bloque pas?