Uruchomię to:
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
Uwaga: Próbowałem z i bez -t w ssh.
Dane wyjściowe debugowania z -vvv są następujące:
...
ldconfig deferred processing now taking place
ALL DONE with druid environment setup!
debug1: client_input_channel_req: channel 0 rtype exit-status reply 0
A potem cały proces trwa wiecznie. Dlaczego polecenie ssh się nie kończy? Próbowałem z -t i bez, i próbowałem z wyjściem i bez. To nie robi różnicy :(
Aktualizacja: Kiedy piszę „zadania” na końcu skryptu, widzę:
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 &
Jak mogę uruchomić te usługi i nadal mieć sesję ssh, która się kończy?
Aktualizacja: teraz ręcznie odrzucam te procesy. Ta rzecz nadal nie wychodzi. Kumpel WTF?
Aktualizacja: Podczas wykonywania linia po linii dwa polecenia nie wracają do powłoki bez naciśnięcia CR:
nohup bin/zookeeper-server-start.sh config/zookeeper.properties &
nohup bin/kafka-server-start.sh config/server.properties &
Odpowiedzi:
Zazwyczaj sesje terminalu SSH zawieszają się, jeśli nadal są otwarte połączenia w tle. Przez połączenia w tle rozumiem takie rzeczy jak:
Spójrz na połączenia, które są nadal aktywne podczas zawieszonej sesji SSH, wpisując
~#
zawieszony terminal SSH.Możliwe, że skrypt otwiera sesje, których nie zdawałeś sobie sprawy. Lub konfiguracje terminala komputera zdalnego, takie jak
.profile
(lub.bashrc
itp.), Mogą zawierać coś, co ustanawia sesję. Powodzenia w polowaniu!Nawiasem mówiąc, niektóre inne sekwencje specjalne oferowane przez klientów OpenSSH mogą być również przydatne:
Inną rzeczą jest to, że jeśli chcesz, aby Twój SSH po prostu uruchamiał twoje polecenia i natychmiast kończył działanie - to znaczy nie chcesz zdalnej sesji terminala - możesz użyć tej
-f
opcjissh
. To zmusi połączenie SSH do pracy w tle.źródło
-f
pracuje dla mnie.background connection
czy możnadisown
go przetwarzać w tle, aby połączenie ssh się nie zawiesiło?