
Tengo un script que toma varios argumentos y necesito ejecutar este script en varias instancias en paralelo en AWS. Por ejemplo, para simplificar, si tengo tres instancias en AWS, me gustaría ejecutar lo siguiente:
On instance-a: script.sh a b
On instance-b: script.sh s t
On instance-c: script.sh y z
Generaré las instancias usando una AMI que tendrá el tiempo de ejecución (MATLAB) y el programa (usando el tiempo de ejecución) instalados como parte de la imagen.
Estaba revisandoesteenlace y vi a Capistrano mencionado. ¿Funcionará eso en mi caso? ¿Alguna otra alternativa ligera que pueda explorarse? Solo para mencionar, necesitaré el estado de devolución y el resultado (archivo CSV) generado a partir de cada instancia.
Respuesta1
Si solo quieres 3, esto funcionará (versión >= 20161222 para --results my.csv
que funcione):
parallel --results my.csv ssh {1} script.sh {2} {3} ::: instance-a instance-b instance-c :::+ a s y :::+ b t z
Pero déjame adivinar: tienes muchas más instancias enumeradas en un archivo llamado hosts.txt
:
instance-a
instance-b
instance-c
No le importa qué instancia ejecuta qué trabajos: son solo trabajadores. Tienes un archivo .tsv como input.tsv
:
a[tab]b
s[tab]t
y[tab]z
Entonces ejecutarías:
parallel --slf hosts.txt --results my.csv -a input.tsv --colsep '\t' script.sh
Si su comando tiene 0
éxito, incluso puede ejecutarlo en servidores baratos del mercado spot: al usarlo, --retries 5
puede pedirle a GNU Parallel que vuelva a hacer el trabajo en otro servidor si un servidor falla (es decir, no devuelve 0
).