Ich versuche, in meiner Schleife Aktionen auf mehreren Servern auszuführen, möchte meine Aktionen jedoch auf dem ersten Server starten und direkt zum zweiten Server gehen, ohne auf die Fertigstellung des ersten Servers zu warten.
HOSTS="host1 host2"
For hostname in ${HOST} ;
do ssh -tt ${USERNAME}@${hostname} << EOF
actions
exit
EOF
Done
Hat jemand eine Idee, wie man das in Linux sh bash macht?
Vielen Dank im Voraus.
Antwort1
pdsh
scheint Ihren Anforderungen zu entsprechen. Führt SSH-Verbindungen parallel und in mehreren Threads aus.
Beispiel:
$ pdsh -w 192.168.1.4,192.168.1.250 uname -r
192.168.1.4: 2.6.32-431.17.1.el6.x86_64
192.168.1.250: 2.6.32-431.11.2.el6.x86_64
$
Wie kann ich eine einzelne Datei gleichzeitig an mehrere Remote-Standorte senden?
Antwort2
Verwenden Sie GNU Parallel:
parallel -S host1,host2 --nonall uname -a
Wenn die Aufgabe komplexer ist, erstellen Sie eine Funktion:
do_actions() {
action
packed
function
}
export -f do_actions
HOSTS="host1,host2"
parallel -S $HOSTS --ssh 'ssh -l '$USERNAME --nonall --env do_actions do_actions
Wenn der Benutzername derselbe ist wie, whoami
dann reicht folgendes:
parallel -S $HOSTS --nonall --env do_actions do_actions
GNU Parallel muss nicht global installiert werden: Wenn es nicht installiert ist, können Sie eine persönliche Installation durchführen.
wget pi.dk/3
bash 3