GNU/Linux >> Tutoriales Linux >  >> Linux

¿Consulta la lista de servidores para la memoria/cpu asignada?

Ejecutar RHEL 6.2, intentar escribir un script bash en SSH para una lista de servidores remotos y escribir las CPU y la memoria total en un archivo, una línea por host en el siguiente formato:

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

Esto es lo que tengo hasta ahora, no funciona completamente, lo que me estoy ejecutando es la parte en la que el sistema SSH ejecuta cat /proc/cpuinfo y free .

El script bash se llamaría así:./query_host_info.sh <DEST> <USER> <FILE>

El archivo del que lee las listas de hosts es un archivo de nombres de host de uno por línea.

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

Respuesta aceptada:

Acabo de modificar su 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. ¿Por qué Windows10 VM es lento en OpenStack?

  2. Una impresionante lista de aplicaciones y recursos para sistemas operativos elementales

  3. Matriz de permisos para servidores en la nube

  4. Bash para ejemplos de bucle

  5. Comprobar si existe una variable en una lista en Bash

4 administradores de listas de tareas para el escritorio de Linux

Tutorial de comandos echo de Linux para principiantes (5 ejemplos)

Cómo aumentar la memoria y la CPU en la máquina Vagrant

Los 10 mejores antivirus para Linux:¡Lista de software antivirus de Linux!

¿Estoy usando virtio para mi invitado KVM?

Uso máximo de memoria de un proceso