Nie kończ EOF za pomocą sshpass

1

Poniżej znajduje się mój kod skryptu:

sshpass -e ssh -o "StrictHostKeyChecking no" voltdb@$DB_SERVER_IP /bin/bash << EOF
cd voltdb/bin
echo "ReInitializing VoltDB, Wait for 5second"
./voltdb init --force
sleep 5s
echo "Starting VoltDB, Wait for 20second"
./voltdb start &
sleep 20s
echo "setUpVoltDB completed"
exit
EOF
echo "After EOF"

Tutaj ./voltdb start & jest wykonywany jako proces w tle

Kiedy uruchamiam cały skrypt, wykonuje wszystkie polecenia w EOF blokuj, ale nigdy nie sięgam do echo "After EOF"

Jeśli komentuję ./voltdb start & line wtedy wszystko działa dobrze.

Proszę mi powiedzieć, jakie zmiany są wymagane, aby to naprawić.

ChetanSankhala
źródło

Odpowiedzi:

0

Moje testy wskazują, że kiedy bash po stronie zdalnej exit, czeka na zakończenie swoich zadań. Powinno to zmienić zachowanie:

./voltdb start &
disown $!

Według ta odpowiedź wszystko będzie dobrze, chyba że proces spróbuje odczytać ze standardowego wejścia lub zapisać na standardowe wyjście. W tym przypadku możesz chcieć zbadać nohup lub tmux (lub screen ).

Kamil Maciorowski
źródło