Ich führe das aus:
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
Hinweis: Ich habe es mit und ohne -t in ssh versucht.
Die Debug-Ausgabe von -vvv lautet wie folgt:
...
ldconfig deferred processing now taking place
ALL DONE with druid environment setup!
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
Und dann sitzt der Prozess einfach für immer da. Warum endet der Befehl ssh nicht? Ich habe es mit -t und ohne versucht, und ich habe es mit dem Ausgang und ohne versucht. Es macht keinen Unterschied :(
Update: Wenn ich am Ende des Skripts 'jobs' eingebe, wird Folgendes angezeigt:
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 &
Wie kann ich diese Dienste ausführen und trotzdem eine SSH-Sitzung beenden?
Update: Ich habe diese Prozesse jetzt manuell abgelehnt. Das Ding geht immer noch nicht aus. WTF Kumpel?
Update: Bei der zeilenweisen Ausführung kehren zwei Befehle nicht zur Shell zurück, ohne CR zu treffen:
nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
nohup bin/kafka-server-start.sh config/server.properties &
Antworten:
In der Regel hängen SSH-Terminalsitzungen ab, wenn noch Hintergrundverbindungen geöffnet sind. Mit Hintergrundverbindungen meine ich Dinge wie:
Sehen Sie sich die Verbindungen an, die in Ihrer SSH-Sitzung noch aktiv sind, indem Sie
~#
Ihr SSH-Terminal eingeben .Es kann sein, dass Ihr Skript Sitzungen öffnet, die Sie nicht erkannt haben. Oder die Terminal-Konfigurationen Ihres Remote-Computers wie
.profile
(oder.bashrc
usw.) enthalten möglicherweise etwas, das eine Sitzung einrichtet. Viel Glück bei der Jagd!Übrigens können auch einige der anderen Escape-Sequenzen, die von OpenSSH-Clients angeboten werden, nützlich sein:
Eine andere Sache, wenn Sie möchten, dass Ihr SSH nur Ihre Befehle ausführt und sofort beendet - das heißt, Sie möchten keine Remote-Terminalsitzung -, können Sie die
-f
Option verwendenssh
. Dadurch wird die SSH-Verbindung zu einem Hintergrundjob.quelle
-f
funktioniert bei mir.background connection
und kann mandisown
den Hintergrundprozess ausführen, damit die SSH-Verbindung nicht hängt?