查找总 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

相关内容