У меня есть сценарий, который принимает несколько аргументов, и мне нужно запустить этот сценарий на нескольких экземплярах параллельно на AWS. Например, для простоты, если у меня три экземпляра в AWS, я хотел бы запустить следующее:
On instance-a: script.sh a b
On instance-b: script.sh s t
On instance-c: script.sh y z
Я буду создавать экземпляры, используя AMI, в котором среда выполнения (MATLAB) и программа (использующая среду выполнения) будут установлены как часть изображения.
Я проверял этот ссылка, и я видел, что Capistrano упоминается. Будет ли это работать в моем случае? Любая другая легкая альтернатива, которую можно изучить? Просто упомяну, что мне понадобятся статус возврата и вывод (файл CSV), сгенерированные из каждого экземпляра.
Если вам нужно только 3, это будет работать (версия> = 20161222 для --results my.csv
работать):
parallel --results my.csv ssh {1} script.sh {2} {3} ::: instance-a instance-b instance-c :::+ a s y :::+ b t z
Но позвольте предположить: у вас есть еще много экземпляров, перечисленных в файле с именем hosts.txt
:
instance-a
instance-b
instance-c
Вам все равно, какой экземпляр выполняет какие задания - они просто рабочие. У вас есть файл .tsv, например input.tsv
:
a[tab]b
s[tab]t
y[tab]z
Затем вы запустите:
parallel --slf hosts.txt --results my.csv -a input.tsv --colsep '\t' script.sh
Если ваша команда вернется 0
в случае успеха вы даже можете работать на дешевых серверах спотового рынка: используя --retries 5
вы можете попросить GNU Parallel повторно выполнить задание на другом сервере, если один сервер выходит из строя (т.е. 0
).