並列ネットワークに4つのCPUがあり、4つのCPUのそれぞれでNつのジョブを実行しようとしています。また、NジョブをXジョブに分割し、4つの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のようにパスワードを何度も尋ねるのはとんでもないアプローチです。私はリモートコンピュータ(例えば、cpu1(パラレルネットワークの一部))でssh-keygenを使用しています。ここでcommandscript.cc
鍵ペアを生成するためにコンパイルし、秘密鍵はとに保存ssh-keygen -t rsa
され、公開鍵はとに保存されます。この状況を解決する方法についての洞察力はありますか?パラレルネットワークへのsudoアクセス権がありません。id_rsa
authorized_keys
id_rsa.pub
authorized_keys.pub
答え1
nJobsと同じくらいパスワードを求めるのは不可能なアプローチです。
を使用してSSHキーペアを作成し、リモートシステムにアクセスできるユーザーとして/ssh-keygen
としてログインし、そのペアの公開キーをに保存します。不要。ssh
scp
~/.ssh/authorized_keys
sudo
しかし、これは期待どおりに機能しませんでした。 [...]その行を次のように変更すると:
この問題を直接解決しました。
また、見ることができます平行そしてリモートホストのリスト。スクリプト時間を節約できます。