원격 tar 병렬화 및 ssh 파이프로 출력 가져 오기

Johnny_Bit

사용중인 스크립트를 병렬화하려고 시도했지만 지금까지 GNU Parallel은 매우 어렵습니다.

2 개의 파일이 있습니다. 하나는 명령을 실행할 호스트를 포함하고 다른 하나는 명령을위한 매개 변수를 가지고 있습니다. 다음은 샘플 데이터입니다.

$ cat workers.host 
[email protected]
[email protected]
[email protected]
[email protected]



$ cat paths
/usr/local/jar/x/y/ jarxy
/usr/local/jar/z/y/ jarzy
/usr/local/jar/y/y/ jaryy
/usr/local/far/x/y/ farxy
/usr/local/jaz/z/z/ jazzz
/usr/local/mu/txt/ana/ acc01
/usr/local/jbr/x/y/ accxy

이를 처리하기 위해 다음 스크립트를 사용합니다.

#!/bin/bash

echo "Run this on 192.168.130.10";

DATA=`date +%F`
DDAY=`date +%u`
DOMBAC='nice tar cpzf'

readarray -t hosts < workers.host

len=${#hosts[@]};
processed=0;

while read -r -a line; do

  let hostnum=processed%len;

  ssh ${hosts[$hostnum]} -i /root/.ssh/id_rsa "$DOMBAC - ${line[0]}" > "/data/backup/$DDAY/${line[1]}_${DATA}_FULL.tgz"

  let processed+=1;
done < paths

이것은 잘 작동하지만 기계마다 기계에서 단계별로 처리됩니다. 호스트는 상당히 압도적이며 네트워크는 여기서 문제가되지 않으므로 가능한 한 병렬화하고 싶었습니다. 예를 들어 각 호스트에서 4 개의 tar 명령 인스턴스를 실행하고 ssh를 통한 출력을 적절한 이름의 파일로 파이프합니다. 나는 병렬로 완전히 길을 잃었습니다 --results --sshloginfile... 그리고 궁극적으로 달성하려는 것은 각 호스트에서 각각 다른 매개 변수를 사용하여 4 개의 작업을 실행하는 것입니다 (예를 들어 호스트 2가 호스트 1이 이미 한 것을 덮어 쓰지 않도록) . GNU Parallel에서이 작업을 수행 할 수 있습니까?

올레 탄게

먼저 한 줄의 입력에서 여러 인수를 추출하는 방법을 알아야합니다.

cat paths | parallel --colsep ' ' echo {2} == {1}

(일부 {2}는 {1}에서 생성 될 수 있습니다. 항상 그런 경우 {= =}을 살펴볼 수 있지만 이는 다른 질문에 대한 이야기입니다.)

원격으로 작업을 실행하려면 다음을 사용하십시오 -S.

cat paths | parallel --colsep ' ' -S server echo {2} == {1}

원격 서버에서 실행되는 작업 수를 제어하려면 다음을 사용하십시오 -j.

cat paths | parallel --colsep ' ' -j4 -S server echo {2} == {1}

로컬에 저장된 출력을 얻으려면 다음을 --return --cleanup사용할 수 있습니다.

cat paths | parallel --return {2} --cleanup --colsep ' ' -j4 -S server echo {2} == {1} '>' {2}

출력을 다른 디렉토리에 로컬로 저장하려면 /./ 트릭을 사용해야합니다.

cat paths | parallel --return my/local/dir/./{2} --cleanup --colsep ' ' -j4 -S server echo {2} == {1} '>' {2}

특수 ssh명령을 사용하려면 --ssh다음을 사용하십시오 .

parallel --ssh "ssh -i $HOME/.ssh/id_rsa.pub -lroot" --return {2} --cleanup --colsep ' ' -j4 -S server echo {2} == {1} '>' {2}

여러 서버에서 실행하려면 --slf대신 사용하십시오 -S.

parallel --slf hosts.txt --ssh "ssh -i $HOME/.ssh/id_rsa.pub -lroot" --return {2} --cleanup --colsep ' ' -j4 echo {2} == {1} '>' {2}

따라서 전체적으로 명령은 다음과 같이 보일 수 있습니다.

parallel --slf hosts.txt --ssh "ssh -i $HOME/.ssh/id_rsa.pub -lroot" --return /data/backup/$DDAY/./{2}_${DATA}_FULL.tgz --cleanup --colsep ' ' -j4 "$DOMBAC - {1} > {2}_${DATA}_FULL.tgz"

이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.

침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

분류에서Dev

원격 SSH의 출력을 로컬로 가져 오기

분류에서Dev

데몬 프로세스로 출력 및 입력 가져 오기

분류에서Dev

Jenkins 파이프 라인에서 SSH 단계 출력 가져 오기

분류에서Dev

RxJS Group By 및 원격 데이터 합계 가져 오기

분류에서Dev

wxPython은 원격 이미지 가져 오기 및 스레딩

분류에서Dev

curl -o가 출력을 저장 한 파일 이름 및 경로 가져 오기

분류에서Dev

하위 매력에서 원격 장치 이름 가져 오기

분류에서Dev

원격 SSH 서버의 tar 아카이브에서 특정 파일 추출

분류에서Dev

Terraform : 모듈 및 for_each로 출력 가져 오기

분류에서Dev

PowerShell : CSV 파일 가져 오기, 그룹 크기 계산 및 개수가있는 새 열을 추가하는 원본 파일로 출력

분류에서Dev

Egit을 사용하여 로컬 및 원격 저장소간에 동기화되지 않은 파일 목록 가져 오기

분류에서Dev

원격 (Paramiko) ssh 명령의 출력을 성공 / 실패 부울로 평가

분류에서Dev

libgit2로 가져 오기 (가져 오기 및 병합)

분류에서Dev

Bash tar 및 로그 파일에 출력

분류에서Dev

원격 서버용 SSH 키 가져 오기

분류에서Dev

SSH를 통해 원격 변수 가져 오기

분류에서Dev

가져 오기 및 푸시를위한 git 원격 다른 원격

분류에서Dev

이 git에 해당하는 Mercurial : 분기 이름 변경 및 원격 분기 가져 오기

분류에서Dev

foreach 및 doSNOW를 사용하여 병렬로 외부 프로그램 호출 : 결과를 가져 오는 방법?

분류에서Dev

Facebook API 2.1 쿼리 및 데이터 출력 가져 오기 방법

분류에서Dev

SSH 및 Telnet이 비활성화 된 경우 원격 액세스가 가능합니까?

분류에서Dev

VMware 및 Fedora 29 ssh에서 원격 시스템으로의 파이프 손상

분류에서Dev

추가 출력을 출력 파일에 파이핑 및 쓰기

분류에서Dev

정기적 인 로그인 및 원격 명령 실행을 가능하게 유지하면서 쉘용 SSH ForceCommand

분류에서Dev

Theano : 행렬 차원 및 행렬 값 가져 오기 (SharedVariable)

분류에서Dev

bash 쉘-ssh 원격 스크립트 캡처 출력 및 종료 코드?

분류에서Dev

bash 쉘-ssh 원격 스크립트 캡처 출력 및 종료 코드?

분류에서Dev

파이썬 프로젝트 구조 및 가져 오기

분류에서Dev

터미널에서 원격 파일 크기 가져 오기

Related 관련 기사

  1. 1

    원격 SSH의 출력을 로컬로 가져 오기

  2. 2

    데몬 프로세스로 출력 및 입력 가져 오기

  3. 3

    Jenkins 파이프 라인에서 SSH 단계 출력 가져 오기

  4. 4

    RxJS Group By 및 원격 데이터 합계 가져 오기

  5. 5

    wxPython은 원격 이미지 가져 오기 및 스레딩

  6. 6

    curl -o가 출력을 저장 한 파일 이름 및 경로 가져 오기

  7. 7

    하위 매력에서 원격 장치 이름 가져 오기

  8. 8

    원격 SSH 서버의 tar 아카이브에서 특정 파일 추출

  9. 9

    Terraform : 모듈 및 for_each로 출력 가져 오기

  10. 10

    PowerShell : CSV 파일 가져 오기, 그룹 크기 계산 및 개수가있는 새 열을 추가하는 원본 파일로 출력

  11. 11

    Egit을 사용하여 로컬 및 원격 저장소간에 동기화되지 않은 파일 목록 가져 오기

  12. 12

    원격 (Paramiko) ssh 명령의 출력을 성공 / 실패 부울로 평가

  13. 13

    libgit2로 가져 오기 (가져 오기 및 병합)

  14. 14

    Bash tar 및 로그 파일에 출력

  15. 15

    원격 서버용 SSH 키 가져 오기

  16. 16

    SSH를 통해 원격 변수 가져 오기

  17. 17

    가져 오기 및 푸시를위한 git 원격 다른 원격

  18. 18

    이 git에 해당하는 Mercurial : 분기 이름 변경 및 원격 분기 가져 오기

  19. 19

    foreach 및 doSNOW를 사용하여 병렬로 외부 프로그램 호출 : 결과를 가져 오는 방법?

  20. 20

    Facebook API 2.1 쿼리 및 데이터 출력 가져 오기 방법

  21. 21

    SSH 및 Telnet이 비활성화 된 경우 원격 액세스가 가능합니까?

  22. 22

    VMware 및 Fedora 29 ssh에서 원격 시스템으로의 파이프 손상

  23. 23

    추가 출력을 출력 파일에 파이핑 및 쓰기

  24. 24

    정기적 인 로그인 및 원격 명령 실행을 가능하게 유지하면서 쉘용 SSH ForceCommand

  25. 25

    Theano : 행렬 차원 및 행렬 값 가져 오기 (SharedVariable)

  26. 26

    bash 쉘-ssh 원격 스크립트 캡처 출력 및 종료 코드?

  27. 27

    bash 쉘-ssh 원격 스크립트 캡처 출력 및 종료 코드?

  28. 28

    파이썬 프로젝트 구조 및 가져 오기

  29. 29

    터미널에서 원격 파일 크기 가져 오기

뜨겁다태그

보관