클러스터 노드 전체에서 병렬로 셸 스크립트 실행

클러스터 노드 전체에서 병렬로 셸 스크립트 실행

제 생각에는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 이상이 필요합니다.

관련 정보