2

我正在尝试parallel在多个服务器上使用ssh,实际上我想做的是:

    parallel -s computer_list.txt < command.txt

server_list.txt服务器列表在哪里,command.txt看起来像

    fist_job.sh
    second_job.sh
    ...

但我不希望所有服务器都完成列表中的所有工作,我希望每个工作*.sh都在随机服务器上执行一次,所有这些都可以访问执行每个命令所需的所有文件。

换句话说,我正在寻找的是一种概括:

   parallel < command.txt
4

2 回答 2

1

我想你可以做这样的事情:

服务器.txt

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

工作.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 上安装 (shuffle) 的。它可能被称为shuf在其他机器上。

于 2018-08-31T11:20:58.140 回答
0

这对我有用:

parallel --slf computer_list.txt < command.txt

我使用版本 20180822。

于 2018-09-08T16:46:15.387 回答