#!/bin/bash # a script to find which nodes, defined in a cluster definition file # cluster.txt are responding to ping setglobal COUNT = '0' if [[ ! -z "$1" ]] { setglobal WANTED = $1 } if [[ -f cluster.txt ]] { # select which hosts to scan while read HOSTNAME MACADDR IPADDR ILOIPADDR DOMAIN ROLE { if [[ "$HOSTNAME" = end ]] { continue } if [[ -z "$WANTED" || "$WANTED" = all || "$WANTED" = "$ROLE" || "$WANTED" = "IPADDR" || "$WANTED" = "$HOSTNAME" ]] { setglobal ALLHOSTS = ""$ALLHOSTS $IPADDR"" } } < cluster.txt if [[ -z "$ALLHOSTS" ]] { exit; } # fping is fast but might not be available if [[ -z `which fping` ]] { # use standard ping instead for IP in [$ALLHOSTS] { setglobal UP = $[ping -c 1 $IP | grep ttl |cut -f4 -d" " | cut -f1 -d":] if [[ ! -z "$UP" ]] { setglobal COUNT = $shExpr('COUNT + 1') echo $UP $ROLE } } } else { # we can use fping setglobal UP = $[fping -aq $ALLHOSTS !2 > /dev/null] for H in [$UP] { setglobal COUNT = $shExpr('COUNT + 1') echo $H } } echo "$COUNT hosts up" } else { echo "Warning : no cluster definition (cluster.txt) found" }