napisz bash, który ssh's na wiele serwerów i uruchamia tam skrypt, który uruchamia aplikację, ale nie umiera, gdy ssh się rozłącza

1

Tak wygląda mój skrypt. To działa, ponieważ uruchamia aplikację na zdalnych serwerach i widzę procesy od góry, ale kiedy skrypt kończy procesy, umierają. Potrzebuję sposobu, aby pozostawić procesy uruchomione na tych zdalnych serwerach na czas nieokreślony. Mogę użyć tej metody do uruchamiania poleceń na zdalnych serwerach. Tylko wtedy, gdy próbuję uruchomić skrypt na zdalnym serwerze, który uruchamia procesy, w których mam problem

#!/bin/bash
for HOST in $(cat servers.txt); do
   ssh user@$HOST nohup /opt/app.sh
done
#
Tomek
źródło
Użyj tmuxlub, screenaby uruchomić polecenie na zdalnym serwerze.
Kusalananda

Odpowiedzi:

4

Użyj screenna zdalnych hostach:

for host in $(cat hostlist.txt); do
   ssh user@${host} 'screen -dmS MyProcess /path/to/job.sh'
done
DopeGhoti
źródło
Próbowałem użyć ekranu, jak wspomniałeś, ale otrzymuję ten sam wynik. Procesy rozpoczynają się na zdalnych serwerach, ale gdy powyższy skrypt lokalny osiągnie „gotowe” i zakończy się, procesy na zdalnym serwerze giną.
Tom
Następnie zajrzałbym do rzeczywistej zdalnej pracy; wygląda na to, że wykonuje i wykonuje swoje zadanie, a następnie kończy. W takim przypadku konieczne będzie wywołanie zadania w pętli w ramach screensesji; np screen -dmS MyJob "while sleep 60; do /path/to/job.sh; done".
DopeGhoti
2

Rozważ użycie pssh lub GNU równoległego do uruchamiania rzeczy na zdalnych komputerach.

Rozważ uruchomienie na każdym zdalnym komputerze swoich skryptów za pomocą batchlubat .

Więc możesz biegać pssh -H host1 -H host2 batch -f remotescript.sh

Być może przydałby się również rozproszony system automatyzacji kompilacji, taki jak lody .

Basile Starynkevitch
źródło