通过 ssh 在 bash 中进行循环以实现并行网络

通过 ssh 在 bash 中进行循环以实现并行网络

我在并行网络中有 4 个 CPU,并且希望在这 4 个 CPU 中的每一个上运行 N 个作业。我还想将 N 个作业分成 X 个作业,并在 4 个 CPU 上的每个 CPU 上将其作为循环运行。 bash 脚本如下所示:

#!/bin/bash
runevents() {
   nEvents=5000
   nJobs=100
   ePerJob=$((nEvents/nJobs))
   ssh $1
   for ((i=0; i<nJobs; i++))
   do
      dir_run=/home/user/task/
      "cd $dir_run && nice -n0 ./commandscript -c commandscipt.cmnd -o results/job_$RANDOM -s $RANDOM -n $ePerJob >$dir_run/job_$RANDOM.out"
   done
}

runevents cpu1
runevents cpu2 
runevents cpu3
runevents cpu4

exit

但这并没有按预期工作。它给出了文件或路径不存在的错误,文件或路径存在且路径正确。另外,如果我将该行修改为:

ssh $1 "cd $dir_run && nice -n0 ./commandscript -c commandscipt.cmnd -o results/job_$RANDOM -s $RANDOM -n $ePerJob >$dir_run/job_$RANDOM.out" 它可以工作,但随后会像 nJobs 一样多次询问密码,这是一种荒谬的方法。我在远程机器上使用了 ssh-keygen,比如 cpu1 (也是并行网络的一部分),我在其中编译生成commandscript.cc密钥对ssh-keygen -t rsa,私钥存储在id_rsa和 中authorized_keys,公钥存储在id_rsa.pub和 中authorized_keys.pub。对解决这种情况有什么见解吗?我没有 sudo 访问并行网络的权限。

答案1

要求输入密码的次数与 nJobs 一样多,这是一种荒谬的方法。

为自己创建一个 ssh 密钥对(带有ssh-keygen),使用ssh/scp以您有权访问远程计算机的用户身份登录,并将该对的公钥存储在 中~/.ssh/authorized_keys。不需要sudo

但这并没有按预期工作。 [...]如果我将该行修改为:

您自己已经解决了这个问题。

还可以看看平行以及远程主机列表。可能会节省你一些脚本编写的时间。

相关内容