1

テキストファイル内のディレクトリ名のリストを入力として受け取る単純な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
4

1 に答える 1

1

あなたの説明から、あなたは正しいことをしているので、バグに遭遇した可能性があります.

workerList.txt と folderList.txt を最小化してから実行してみてください:

parallel -D ...

(また、便利なオプション --result もチェックしてください)。

于 2014-08-07T07:49:59.260 に答える