encontra memória RAM total e troca de memória

1

Eu preciso escrever um script para encontrar a memória total e swap total de vários servidores linux (2000+). Eu tenho um servidor confiável de onde posso fazer login em todos esses servidores 2000 sem uma senha.

Quando executo esse script, ele deve gerar uma saída assim:

Server         total memory        swap
redhat1   
redhat2
redhat3
...
redhat2000

Como posso conseguir isso?

    
por Venom 28.02.2013 / 07:21

2 respostas

4

O arquivo /proc/meminfo contém as informações que você procura. É muito fácil analisar também.

Isso vai te dar a RAM e swap (nessa ordem, a unidade é kB em todos os sistemas que eu conheço):

awk '/^(MemTotal|SwapTotal)/{print $2}' /proc/meminfo

Para formatá-lo, você pode fazer algo como:

printf "%s\t%d\t%d\n" $(hostname) \
                      $(awk '/^(MemTotal|SwapTotal)/{print $2}' /proc/meminfo)

Para combinar isso com o ssh, faça algo como:

for host in your_list_of_servers ; do
  printf "%s\t%d\t%d\n" $host \
                   $(ssh $host "awk '/^(MemTotal|SwapTotal)/{print \}' /proc/meminfo")
done
    
por 28.02.2013 / 07:30
1

Primeiro você precisa configurar a senha menos o log-in, você pode consultar esta página.

Depois disso, você pode usar o script abaixo conforme sua exigência.

#!/bin/bash
# store username:ip combo here separated by a whitespace
_pair="[email protected] [email protected] [email protected]"

for e in $_pair
do
        # extract user and ips for each $e in $_pair
        IFS='@'
        set -- $e
        _user="$1"
        _ip="$2"

        sleep 2
        echo "Connecting to server '${_ip}' via SSH..."
        ssh ${_user}@${_ip} "free -m | awk -v h=$HOSTNAME '(/Mem/||/Swap/){printf("%s\t%s%d\t",h,$1,$2)}'; echo -e"
done
    
por 28.02.2013 / 07:40