クラスタノード全体で並列にシェルスクリプトを実行する

クラスタノード全体で並列にシェルスクリプトを実行する

私の考えではdsh(分散シェル)これは良いオプションですが、ノードでシェルスクリプトを実行すると予想される出力が得られません。

dsh -aM -c bash /home/cloudera/bash_script.sh
[email protected]: files in folder
[email protected]: server2
[email protected]: server1
[email protected]: sleep time................
[email protected]: server3
[email protected]: sleep time................
[email protected]: sleep time................

bash_script.sh

#!/bin/bash

while true;
do

shopt -s nullglob
#shopt -s dotglob # To include hidden files
files=(/home/cloudera/MyFolder/*)
echo "files in folder" $files[@]

if [  ${#files[@]} -gt 0 ];
then
        for entry in "/home/cloudera/abc"/*
    do
      cp $entry /home/cloudera/Backup
      var=`basename $entry`
      var1=`echo ${var//[.csv]/}`
      echo $var1
      gawk -f abc.awk $entry
      rm -r -f $entry

    done
fi
 echo "server2" 
sleep 5s
 echo "sleep time................"
 sleep 10s
done

dshなしでスクリプトを実行すると、問題なく動作します。なぜこのような奇妙な動作が発生するのですか?デフォルトでは、dshは最大64のコマンドを並列に実行できます。 dshはすべてのbashコマンドをサポートしていますか?ノード全体でシェルスクリプトを並列化するための最良のオプションは何ですか?

ベストアンサー1

移植を始める前にGNU Parallelを試してください。

parallel -j0 --tag --line-buffer ssh {} bash /home/cloudera/bash_script.sh ::: server1 server2 server3

--line-bufferにはバージョン20130822以降が必要です。

おすすめ記事