Como executar um script de shell em 10 hosts simultaneamente? [duplicado]

0

Atualmente estou monitorando 10 hosts. Eu quero escrever um script que irá calcular o espaço em disco a cada 24 horas e, em seguida, se o sistema de arquivos de um host é crítico para qualquer host, ele moverá os arquivos antigos desse host para o host que possui o maior espaço em disco?

    
por Debasish 11.05.2016 / 20:15

2 respostas

1

Existem invólucros paralelos do ssh - aqui estão alguns que eu encontrei no CentOS7 / EPEL:

    Name        : pssh
    Repo        : epel/x86_64
    Summary     : Parallel SSH tools
    URL         : http://code.google.com/p/parallel-ssh/
    License     : BSD
    Description : This package provides various parallel tools based on ssh and scp.
                : Parallell version includes:
                :  o ssh : pssh
                :  o scp : pscp
                :  o nuke : pnuke
                :  o rsync : prsync
                :  o slurp : pslurp

    Name        : pdsh
    Repo        : epel/x86_64
    Summary     : Parallel remote shell program
    URL         : https://pdsh.googlecode.com/
    License     : GPLv2+
    Description : Pdsh is a multithreaded remote shell client which executes commands
                : on multiple remote hosts in parallel.  Pdsh can use several different
                : remote shell services, including standard "rsh", Kerberos IV, and ssh.

    Name        : mpssh
    Repo        : epel/x86_64
    Summary     : Parallel ssh tool
    URL         : https://github.com/ndenev/mpssh
    License     : BSD
    Description : mpssh is a parallel ssh tool. What it does is connecting to a number of hosts
                : specified in the hosts file and execute the same command on all of them

Assim, você pode usar esse script para consultar os sistemas remotos através do ssh para obter o espaço em disco e, em seguida, avaliar quais limpar e quais usar como destino.

    
por 11.05.2016 / 20:53
0

Isso executará um script na lista especificada de hosts em paralelo:

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
    
por 11.05.2016 / 20:27