총 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

관련 정보