▽1
●
gizmo5 ●1250ポイント ベストアンサー |
bashで下記のような処理をparalellで並列処理したいと考えてます。
for dir in `cat /tmp/rsync-list`;do
for src in `cat /tmp/rsync-$dir`;do
echo $src;
find $src -depth | cpio -o > /archive/$src.cpio;
done
done
二重のループと言っても、処理しているのは $src だけなので以下のようなシェルスクリプトに書き換えられます。
for dir in `cat /tmp/rsync-list`;do cat /tmp/rsync-$dir | \ parallel "find {} -depth | cpio -o > /archive/{}.cpio" done
/fileserver/fileA?Zまでのファイルをserver1 server2 server3の3台を使って、1台あたり4個分を並列処理でgzip圧縮する場合
状況がよく分かりませんがこのようなコマンドになるはずです。
ls /fileserver/file[A-Z] | \ parallel --sshlogin server1,server2,server3 \ --transfer --return {.}.gz --cleanup "gzip {}"
数は制御できません。
早く終わったサーバから次のジョブが実行されるので、たまたま小さいファイルだけを割り当てられた代わりにたくさんの処理をしたサーバができるというような動作をします。
オプションの意味は man parallel を見れば分かると思います。
http://www.gnu.org/software/parallel/man.html
まったくparallelを使ったことが無いのであれば、↓で雰囲気がつかめると思います。
http://siguniang.wordpress.com/2012/09/09/notes-on-gnu-parallel-the-command-line-power-tool/
http://savannah.gnu.org/forum/forum.php?forum_id=7488
こちらが参考になるとおもいますよ。
http://oshiire.to/archives/1686
あとはこちらも参考になると思いますよ。