GNU parallel 사용 예
GNU parallel은 하나 이상의 컴퓨터를 사용하여 작업을 병렬로 실행하기위한 쉘 도구이다. 작업(job)은 입력의 각 행에 대해 실행할 단일 명령 또는 스크립트이다. 전형적인 입력은 파일 목록, 호스트 목록, 사용자 목록, URL 목록 또는 표 목록이다. 작업은 파이프에서 읽은 명령어일 수도 있다. GNU parallel은 입력을 분리하여 병렬로 명령을 파이프 할 수도 있다.
사용법:
parallel [options] [command [arguments]] < list_of_arguments
parallel [options] [command [arguments]] (::: arguments|:::: argfile(s))…
cat … | parallel –pipe [options] [command [arguments]]
-j n parallel 로 n 개의 작업을 수행
-k 순서를 유지
-X 문맥 치환을 가지는 복수의 인수
–colsep regexp Split input on regexp for positional replacements
{} {.} {/} {/.} {#} 문자열 대체
{3} {3.} {3/} {3/.} 문자열의 위치 대체
-S sshlogin 예: foo@server.example.com
–slf .. ~/.parallel/sshloginfile 을 sshlogins 리스트로 사용
–trc {}.bar –transfer –return {}.bar –cleanup 의 약어
–onall 모든 sshlogins에 대해 주어진 인수(argument)화 함께 명령을 실행
–nonall 모든 sshlogins에 대해 인수 없이 명령을 실행
–pipe stdin (표준입력)을 여러 작업(job)으로 분리.
–recend str –pipe의 레코드 끝 구분자
–recstart str –pipe의 레코드 시작 구분자
* ssh로 접속하여 모든 등록된 호스트의 전원 끄기
호스트는 host.txt에 아래와 같이 등록되어 있다. 아래 예에서, 비밀번호를 일일이 입력하지 않으려면, ssh-keygen으로 키파일을 생성해 등록해 놓으면 된다(참고: https://blog.boxcorea.com/wp/archives/92 에서 해당부분 참고)
$ cat host.txt 192.168.100.11 192.168.100.14 ...
$ cat host.txt | parallel -k -q ssh root@{} "poweroff"
* ping 을 이용하여 대상 호스트들의 상태를 간단히 확인하기.
$ cat host.txt | parallel -k -q ping -c 1 -w 1 {} PING 192.168.100.14 (192.168.100.14) 56(84) bytes of data. 64 bytes from 192.168.100.14: icmp_seq=1 ttl=64 time=0.211 ms --- 192.168.100.14 ping statistics --- 1 packets transmitted, 1 received, 0% packet loss, time 0ms rtt min/avg/max/mdev = 0.211/0.211/0.211/0.000 ms PING 192.168.100.15 (192.168.100.15) 56(84) bytes of data. --- 192.168.100.15 ping statistics --- 2 packets transmitted, 0 received, 100% packet loss, time 999ms ...
참고문서 :https://www.gnu.org/software/parallel/parallel_tutorial.html#Multiple-input-sources