GNU/Linux >> Linux の 問題 >  >> Linux

割り当てられたメモリ/CPUのサーバーのクエリリスト?

RHEL 6.2を実行し、リモートサーバーのリストにSSHで接続するbashスクリプトを記述し、CPUと合計メモリを次の形式でホストごとに1行ずつファイルに書き込みます。

HOSTNAME1    CPUS: 12    MEMORY: 64
HOSTNAME2    CPUS: 08    MEMORY: 12

これが私がこれまでに持っているものです、それは完全には機能しません、私が実行しているのはシステムSSHがcat /proc/cpuinfoを実行する部分です およびfree

bashスクリプトは次のように呼び出されます:./query_host_info.sh <DEST> <USER> <FILE>

ホストのリストを読み取るファイルは、ホスト名の1行に1つのファイルです。

#!/bin/bash

# username to connect via ssh
USER=$2
# destination path/filename to save results to
DEST=$3
# source list of hostnames to read from
FILE=$1

# Iterate through line items in FILE and
# execute ssh, if we connected successfully
# run proc/info and free to find memory/cpu alloc
# write it to DEST path/file
# if we don't connect successfully, write the hostname
# and "unable to connect to host" error to DEST path/file
for i in `cat $FILE`; do
  echo -n ".";
  CHK=`ssh -q -o "BatchMode yes" -o "ConnectTimeout 5" 
            -l $USER $i "echo success"`;
  if [ "success" = $CHK ] >/dev/null 2>&1
  then
    `ssh -q -o "BatchMode yes" -o "ConnectTimeout 5" -l $USER $i "
        printf "$i    ";
        echo "`cat /proc/cpuinfo | grep processor | awk '{a++} END {print a}';
        free -g | sed -n -e '/^Mem:/s/^[^0-9]*([0-9]*) .*/1/p'`";" >> ${DEST}`;
  else
    printf "${i}tUnable to connect to hostn" >> ${DEST};
  fi
done
# All line items have been gone through,
# show done, and exit out
echo ""
echo "Done!"
echo "Check the list 'checkssh_failure' for errors."
exit 0

承認された回答:

スクリプトを変更しただけです:

#!/bin/bash
# username to connect via ssh
USER=$2
# destination path/filename to save results to
DEST=$3
# source list of hostnames to read from
FILE=$1

[[ $# -ne 3 ]] && { echo -e "nUsage: $0  <User> <ServerList> <LogFile>n"; exit 1; };

func_ssh() {
    local Ipaddr=$1
    local Cmd="${@:2}"
    local LogIt=${DEST}
    ssh -q -o "BatchMode yes" -o "ConnectTimeout 5" -l $USER $Ipaddr "${Cmd}"
    [[ $? -ne 0 ]] && printf "${Ipaddr}tUnable to connect to hostn" >> ${LogIt}
}

GetTotalProcs="awk '/processor/{a++} END{print a}'  /proc/cpuinfo"
GetMemoryDetails="free -g | sed -n -e '/^Mem:/s/^[^0-9]*([0-9]*) .*/1/p'"

# Iterate through line items in FILE and
# execute ssh, if we connected successfully
# run proc/info and free to find memory/cpu alloc
# write it to DEST path/file
# if we dont connect successfully, write the hostname
# and "unable to connect to host" error to DEST path/file
for srv in $(< $FILE );
do
    echo -n "."
    A="$( func_ssh $srv $GetTotalProcs )"
    B="$( func_ssh $srv $GetMemoryDetails )"
    echo "${srv} CPU: ${A} MEMORY: ${B}" >> ${DEST}
done

# All line items have been gone through,
# show done, and exit out
echo ""
echo "Done!"
echo "Check the list 'checkssh_failure' for errors."
exit 0

Linux
  1. SysAdmins用の80のLinux監視ツール

  2. OpenStackでWindows10VMが遅いのはなぜですか?

  3. WindowsServerでサーバーの負荷を確認する方法

  1. Linux –単一のLinuxプロセスのメモリ使用量を制限しますか?

  2. In Echo {a..z}では特殊文字は何を表していますか?

  3. Go For It –タイマー付きの最新のToDoリスト

  1. 17 HP サーバー上の Linux での hpacucli コマンドの例

  2. Bash for ループの例

  3. Linuxでjvmに割り当てられたヒープサイズを確認する方法