Как использовать параллель на нескольких компьютерах, чтобы список задач выполнялся только один раз? - PullRequest
0 голосов
/ 31 августа 2018

Я пытаюсь использовать parallel на нескольких серверах, используя ssh, на самом деле я хотел бы сделать что-то вроде:

    parallel -s computer_list.txt < command.txt

, где в server_list.txt есть список серверов, а в command.txt выглядит как

    fist_job.sh
    second_job.sh
    ...

Но я не хочу, чтобы все серверы выполняли все задания в списке, я хочу, чтобы каждый *.sh выполнялся только один раз на случайном сервере, все они могут получить доступ ко всем файлам, которые им нужны для выполнения каждая команда.

Другими словами, то, что я ищу, является неким обобщением:

   parallel < command.txt

Ответы [ 2 ]

0 голосов
/ 08 сентября 2018

Это работает для меня:

parallel --slf computer_list.txt < command.txt

Я использую версию 20180822.

0 голосов
/ 31 августа 2018

Я думаю, вы могли бы сделать что-то вроде этого:

servers.txt

server1
server2
server3
server4
serverA
serverB
raspi10
raspi11
raspi12
raspi13
supercomputerA
supercomputerB

jobs.txt

job1
job2
job3
job4
job5
job6

Затем используйте этот bash скрипт:

#!/bin/bash

# Read in list of jobs into array
jobs=( $(<jobs.txt) )

# Get randomised list of servers
servers=( $( gshuf servers.txt) )

# Assign each job to a server and execute in parallel
for ((i==0;i<${#jobs[@]};i++)) ; do
   echo "ssh \"${servers[i]}\" \"${jobs[i]}\""
done | parallel

Пример

, который генерирует следующий вход для GNU Parallel :

ssh "raspi12" "job1"
ssh "serverA" "job2"
ssh "serverB" "job3"
ssh "raspi13" "job4"
ssh "server3" "job5"
ssh "supercomputerB" "job6"

Примечания

gshuf - это способ установки GNU shuf (shuffle) на Mac. На других машинах он может быть известен как shuf.

...