2014-01-16 3 views
0

나는 병렬로 동시에 실행하려는 다음 3 가지 명령 (각각 xargs 및 병렬 프로세스 포함)이 있습니다.Xargs : 3 개의 별도 xargs 명령을 병렬로 실행

1. ls filenames_for_bld*_all | xargs -i bash -c 'calculateMd5Sums "[email protected]"' _ {} 
2. cat filenames_for_bld*_all | awk -F'|' '{print $2}' | xargs -n 1 -P 10 -I {} remotecmd -q -n server1 md5sum {} 2>/dev/null| tee -a ${dir}/md5sums_for_server1 
3. cat filenames_for_bld*_all | awk -F'|' '{print $2}' | xargs -n 1 -P 23 -I {} remotecmd -q -n server2 md5sum {} 2>/dev/null | tee -a ${dir}/md5sums_for_server2 

각 xargs 명령은 개의 별도 서버에서 여러 프로세스를 실행합니다. 그래서 1은 서버 1-5에서 실행되고 2는 서버 6에서 실행되고 3은 서버 7에서 실행됩니다.

위의 3 가지 모두를 병렬로 실행할 수 있습니까?

위에서 xargs를 사용하면 좋습니다. ,

ls: xargs: No such file or directory 
ls: bash: No such file or directory 
ls: calculateMd5Sums: No such file or directory 
ls: 20140107: No such file or directory 
ls: _: No such file or directory 
ls: {}: No such file or directory 

답변

1

그냥 각 행 후 &를 추가 : 나는 줄 바꿈으로 구분, xargsInput 문자열로 위의 3을 설정하는 생각을 한 후 ...

echo $xargsInput | xargs -n 1 -P 3 -I {} sh -c {} 

그러나, 이것은 약간의 오차가 있습니다 선택적 끝에 wait 마무리에 모두 대기 :

ls filenames_for_bld*_all | xargs -i bash -c 'calculateMd5Sums "[email protected]"' _ {} & 
cat filenames_for_bld*_all | awk -F'|' '{print $2}' | xargs -n 1 -P 10 -I {} remotecmd -q -n server1 md5sum {} 2>/dev/null| tee -a ${dir}/md5sums_for_server1 & 
cat filenames_for_bld*_all | awk -F'|' '{print $2}' | xargs -n 1 -P 23 -I {} remotecmd -q -n server2 md5sum {} 2>/dev/null | tee -a ${dir}/md5sums_for_server2 & 
wait 

이 상호 작용을 필요로하지 않는 모든 별도의 쉘 명령 작동합니다.