
Ich habe ein Skript, das mehrere Argumente akzeptiert, und ich muss dieses Skript auf mehreren Instanzen parallel auf AWS ausführen. Wenn ich beispielsweise der Einfachheit halber drei Instanzen auf AWS habe, möchte ich Folgendes ausführen:
On instance-a: script.sh a b
On instance-b: script.sh s t
On instance-c: script.sh y z
Ich werde die Instanzen mithilfe eines AMI erzeugen, auf dem die Laufzeit (MATLAB) und das Programm (das die Laufzeit verwendet) als Teil des Images installiert sind.
Ich habe nachgeprüftDasLink und ich habe gesehen, dass Capistrano erwähnt wurde. Funktioniert das in meinem Fall? Gibt es eine andere einfache Alternative, die man ausprobieren kann? Nur um es zu erwähnen: Ich werde den Rückgabestatus und die Ausgabe (CSV-Datei) benötigen, die von jeder Instanz generiert werden.
Antwort1
Wenn Sie nur 3 möchten, funktioniert dies (Version >= 20161222, damit --results my.csv
es funktioniert):
parallel --results my.csv ssh {1} script.sh {2} {3} ::: instance-a instance-b instance-c :::+ a s y :::+ b t z
Aber lassen Sie mich raten: Sie haben noch viel mehr Instanzen in einer Datei mit dem Namen aufgelistet hosts.txt
:
instance-a
instance-b
instance-c
Es ist Ihnen egal, welche Instanz welche Jobs ausführt – es sind nur Arbeiter. Sie haben eine .tsv-Datei wie input.tsv
:
a[tab]b
s[tab]t
y[tab]z
Dann würden Sie ausführen:
parallel --slf hosts.txt --results my.csv -a input.tsv --colsep '\t' script.sh
Wenn Ihr Befehl 0
erfolgreich zurückgegeben wird, können Sie ihn sogar auf billigen Spot-Market-Servern ausführen: Mithilfe von --retries 5
können Sie GNU Parallel auffordern, den Job auf einem anderen Server erneut auszuführen, wenn ein Server ausfällt (d. h. nicht zurückgegeben wird 0
).