Ich kann Befehle parallel auf einer Liste von Maschinen ausführen, indem ich pssh
command verwende. Um beispielsweise einen Ordner foo
auf mehreren Maschinen zu erstellen, die in aufgelistet sind, hosts.txt
kann ich Folgendes ausführen:
pssh -h hosts.txt -l MyUserName "mkdir foo"
Da der Befehl jedoch weitere Argumente erfordert (z. B. die Verwendung eines öffentlichen Schlüssels zur Authentifizierung usw.), habe ich versucht, das folgende Bash-Skript zu erstellen bar.sh
, sodass der Befehl, den ich ausführen möchte, einfach als Argument für das Skript angegeben wird:
#!/bin/bash
pssh -h hosts.txt -l MyUserName "$@"
Beim Ausführen bar.sh mkdir foo
friert das Terminal jedoch ein, selbst ich kann es nicht mit Strg+C beenden.
Irgendwelche Ideen?
Antwort1
Ich bin nicht so vertraut mit pssh
. Erhalten Sie den gleichen Fehler, wenn Sie GNU Parallel verwenden:
#!/bin/bash
parallel -j10 --slf hosts.txt --nonall "$@"
Tragen Sie den Benutzernamen in hosts.txt ein:
myuser@host1
myuser@host2
Antwort2
Es ist erforderlich, -i zu verwenden (Inline-aggregierte Ausgabe und Fehler für jeden Server), Folgendes funktioniert:
pssh -h pssh.txt -l root -i uptime