人力検索はてな
モバイル版を表示しています。PC版はこちら
i-mobile

gnu paralellで質問があります。
ネストされたループ処理はどのように扱うのでしょうか?

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

またrsyncやsshを利用して複数のサーバーに分散処理する場合はどのようにすればいいでしょうか?
/fileserver/fileA〜Zまでのファイルをserver1 server2 server3の3台を使って、1台あたり4個分を並列処理でgzip圧縮する場合など

よろしくお願いします。

●質問者: yujis
●カテゴリ:ウェブ制作
○ 状態 :終了
└ 回答数 : 4/4件

▽最新の回答へ

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/


2 ● daru1234
●1250ポイント

http://comments.gmane.org/gmane.comp.sysutils.parallel/453
ここが参考になると思います


3 ● boost_beast
●1250ポイント

http://savannah.gnu.org/forum/forum.php?forum_id=7488
こちらが参考になるとおもいますよ。


4 ● boost_beast
●1250ポイント

http://oshiire.to/archives/1686
あとはこちらも参考になると思いますよ。

関連質問

●質問をもっと探す●



0.人力検索はてなトップ
8.このページを友達に紹介
9.このページの先頭へ
対応機種一覧
お問い合わせ
ヘルプ/お知らせ
ログイン
無料ユーザー登録
はてなトップ