10개의 호스트에서 동시에 쉘 스크립트를 실행하는 방법은 무엇입니까? [복사]

10개의 호스트에서 동시에 쉘 스크립트를 실행하는 방법은 무엇입니까? [복사]

현재 10개의 호스트를 모니터링하고 있습니다. 24시간마다 디스크 공간을 계산하고 호스트의 파일 시스템이 호스트에 중요한 경우 해당 호스트에서 디스크 공간이 가장 많은 호스트로 오래된 파일을 이동하는 스크립트를 작성하고 싶습니다.

답변1

병렬 SSH 래퍼가 존재합니다. CentOS7/EPEL에서 찾은 일부는 다음과 같습니다.

    이름: psh
    창고: epel/x86_64
    요약: 병렬 SSH 도구
    URL: http://code.google.com/p/parallel-ssh/
    라이센스: BSD
    설명: 이 패키지는 SSH 및 SCP를 기반으로 하는 다양한 병렬 도구를 제공합니다.
                : 병렬 버전에는 다음이 포함됩니다.
                : o SSH : pssh
                : o scp : pscp
                :오 핵무기: 핵무기
                : 또는 rsync : prsync
                :o GuluGulu: GuluGulu

    이름: pdsh
    창고: epel/x86_64
    요약: 병렬 원격 쉘 프로그램
    URL: https://pdsh.googlecode.com/
    라이센스: GPLv2+
    설명: Pdsh는 명령을 실행하는 다중 스레드 원격 셸 클라이언트입니다.
                : 여러 원격 호스트에서 병렬입니다. Pdsh는 여러 가지 다른 것을 사용할 수 있습니다
                : 표준 "rsh", Kerberos IV 및 ssh를 포함한 원격 셸 서비스입니다.

    이름: mpsh
    창고: epel/x86_64
    요약: 병렬 SSH 도구
    URL: https://github.com/ndenev/mpssh
    라이센스: BSD
    설명: mpssh는 병렬 SSH 도구입니다. 그것이 하는 일은 많은 호스트에 연결하는 것입니다
                : 호스트 파일에 지정하고 모든 호스트에서 동일한 명령을 실행합니다.

따라서 이 스크립트를 사용하여 SSH를 통해 원격 시스템에서 디스크 공간을 쿼리한 다음 정리하고 대상으로 사용할 시스템을 평가할 수 있습니다.

답변2

그러면 지정된 호스트 목록에서 스크립트가 병렬로 실행됩니다.

declare -a CLEANUP
for host in host1.example.com host2.example.com; do # the list can be as long as you need
   OUTPUT="/tmp/${host}.out"
   ssh "$host" '/path/to/script' > "$OUTPUT" &
   CLEANUP+=("$OUTPUT")
done
trap 'rm -fr "${OUTPUT[@]}"' EXIT
# How to parse the output files is an exercise I leave to you

관련 정보