合計RAMメモリとスワップメモリ​​を探す

合計RAMメモリとスワップメモリ​​を探す

複数のLinuxサーバー(2000+)の合計メモリと合計スワップ領域を見つけるためのスクリプトを作成する必要があります。私は信頼できるサーバーを持っており、パスワードなしで2000台のサーバーすべてにログインできます。

このスクリプトを実行すると、次の出力が提供されるはずです。

Server         total memory        swap
redhat1   
redhat2
redhat3
...
redhat2000

この目標をどのように達成できますか?

答え1

この/proc/meminfoファイルには必要な情報が含まれています。分析するのも簡単です。

これにより、RAMとスワップが提供されます(私が知っているすべてのシステムでこの順序で、kB単位)。

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

フォーマットするには:

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

これをSSHと組み合わせるには:

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

答え2

まず、パスワードのないログインを設定する必要があります。以下を参照してください。これページ。

その後、要件に応じて次のスクリプトを使用できます。

#!/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

関連情報