如何在多台计算机上使用并行来只完成一次任务列表?
How to use parallel on multiple computer to have a list of tasks done only once?
我正在尝试使用 ssh
在多个服务器上使用 parallel
,实际上我想做的是:
parallel -s computer_list.txt < command.txt
在 server_list.txt
中有服务器列表,在 command.txt
中看起来像
fist_job.sh
second_job.sh
...
但我不希望所有服务器都完成列表中的所有工作,我希望每个 *.sh
在随机服务器上只执行一次,所有这些都可以访问所有文件他们需要执行每个命令。
换句话说,我正在寻找的是一种概括:
parallel < command.txt
我想你可以这样做:
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
(随机播放)在 Mac 上的安装方式。它在其他机器上可能被称为 shuf
。
这对我有用:
parallel --slf computer_list.txt < command.txt
我用的是20180822版本
我正在尝试使用 ssh
在多个服务器上使用 parallel
,实际上我想做的是:
parallel -s computer_list.txt < command.txt
在 server_list.txt
中有服务器列表,在 command.txt
中看起来像
fist_job.sh
second_job.sh
...
但我不希望所有服务器都完成列表中的所有工作,我希望每个 *.sh
在随机服务器上只执行一次,所有这些都可以访问所有文件他们需要执行每个命令。
换句话说,我正在寻找的是一种概括:
parallel < command.txt
我想你可以这样做:
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
(随机播放)在 Mac 上的安装方式。它在其他机器上可能被称为 shuf
。
这对我有用:
parallel --slf computer_list.txt < command.txt
我用的是20180822版本