テキストファイル内のディレクトリ名のリストを入力として受け取る単純なbashスクリプトがあります。これらのディレクトリを 1 つずつトラバースし、出力をpwdファイルにコピーして、このファイルを結果ディレクトリに移動します。Gnuparallel を使用して、私の 4 コア マシンでこのスクリプトを簡単に並列化できます。bash スクリプト ( myScript.sh) は次のとおりです。
#!/bin/bash
par_func (){
name=$1
cd /home/zahaib/parentFolder/$name
pwd > $name.txt
mv $name.txt /home/zahaib/result/
cd /home/zahaib/parentFolder
}
export -f par_func
parallel -a /home/zahaib/folderList.txt -j 10 par_func
ここで、クラスターで同じスクリプトを並列化したいと考えています。すべてのワーカー ノードがマスター ノードのホーム ディレクトリをマウントしているので、ls /home/zahaib/すべてのワーカー ノードの出力を確認できます。
を使って--envエクスポートしてみましたpar_func。また、ファイル内にワーカー ノードのリストもありworkerList.txtます。parallel私の最初のアイデアは、上記のスクリプトの最後の行を次のように変更して呼び出すことでした。
parallel -vv --env par_func --slf /home/zahaib/workerList.txt -a /home/zahaib/folderList.txt -j 10 par_func
ただし、これは機能していないようで、マスター ノードのシェルは実行後にハングします./myScript.sh。ここで何が欠けていますか?
私のfolderList.txtの内容は次のとおりです。
docs
dnload
driver
pics
music
.
.
私のworkerList.txtの内容は次のとおりです。
2//usr/bin/ssh zahaib@node-1
2//usr/bin/ssh zahaib@node-2
2//usr/bin/ssh zahaib@node-3