【问题标题】:How to use parallel on multiple computer to have a list of tasks done only once?如何在多台计算机上使用并行来只完成一次任务列表?
【发布时间】:2019-02-06 08:53:22
【问题描述】:

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

    parallel -s computer_list.txt < command.txt

server_list.txt 中有服务器列表,command.txt 看起来像

    fist_job.sh
    second_job.sh
    ...

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

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

   parallel < command.txt

【问题讨论】:

    标签: ssh gnu-parallel pssh


    【解决方案1】:

    我猜你可以这样做:

    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 是在 Mac 上安装 GNU shuf(随机播放)的方式。在其他机器上可能称为shuf

    【讨论】:

    • 我做了与问题相同的隐含假设 - 服务器多于任务。如果不是这种情况,只需将servers.txt 多洗几次以使服务器阵列更长。
    【解决方案2】:

    这对我有用:

    parallel --slf computer_list.txt < command.txt
    

    我使用的是 20180822 版本。

    【讨论】:

      猜你喜欢
      • 2011-04-21
      • 1970-01-01
      • 1970-01-01
      • 2021-07-15
      • 1970-01-01
      • 1970-01-01
      • 2011-01-30
      • 1970-01-01
      • 2022-10-06
      相关资源
      最近更新 更多