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