GNU/Linux >> Tutoriels Linux >  >> Linux

Interroger la liste des serveurs pour la mémoire/processeur alloué ?

Exécutez RHEL 6.2, essayez d'écrire un script bash en SSH sur une liste de serveurs distants, et écrivez les processeurs et la mémoire totale dans un fichier, une ligne par hôte au format suivant :

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

Voici ce que j'ai jusqu'à présent, cela ne fonctionne pas complètement, ce que je cours est la partie où le système SSH pour exécuter cat /proc/cpuinfo et free .

Le script bash s'appellerait ainsi :./query_host_info.sh <DEST> <USER> <FILE>

Le fichier à partir duquel il lit les listes d'hôtes est un fichier contenant une ligne de noms d'hôtes.

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

Réponse acceptée :

Je viens de modifier votre script :

#!/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. Pourquoi la machine virtuelle Windows10 est-elle lente sur OpenStack ?

  2. Linux - Limiter l'utilisation de la mémoire pour un seul processus Linux ?

  3. Que signifient les caractères spéciaux dans Echo {a..z} ?

  4. Allez-y - Une liste de tâches moderne avec une minuterie

  5. Bash for loop Exemples

4 gestionnaires de listes de tâches pour le bureau Linux

Tutoriel de commande Linux echo pour débutants (5 exemples)

Comment augmenter la mémoire et le processeur sur une machine vagabonde

Top 10 des meilleurs antivirus pour Linux – Liste des logiciels antivirus Linux !

Vérifier si une variable existe dans une liste dans Bash

comment vérifier la taille du tas allouée pour jvm par linux