X-Git-Url: https://secure.softndesign.org/git/?a=blobdiff_plain;f=master%2Fopt%2Fscript%2Fcheck_network.sh;fp=master%2Fopt%2Fscript%2Fcheck_network.sh;h=5c17bf2d8ee0abc7f20a4c4b80b5536755e19a5f;hb=84523910649b50272f5a8693bf7c5cdb73ad1353;hp=0000000000000000000000000000000000000000;hpb=f81c83b65ada3bc612e87705f15860934f2f5a6d;p=debian6500.git diff --git a/master/opt/script/check_network.sh b/master/opt/script/check_network.sh new file mode 100755 index 0000000..5c17bf2 --- /dev/null +++ b/master/opt/script/check_network.sh @@ -0,0 +1,78 @@ +#!/bin/bash +# +# ============================================================================ +# +# Copyright (C) THALES. All rights reserved +# Author: Alexandre Cazalis +# +# Gestion attente lames esclaves au boot (ping,ssh) +# +# 2013-11-20 : V1.2 LMa +# - Ajout de la personalisation de la commande a executer +# par defaut (uptime). Ajout attente montage nfs avant demarrage +# 2014-05-28 : V1.3 LMa +# - Ajout d'un mode foreground pour ne tenter qu'une fois chaque commande +# - Ajout d'une commande pour exclude la lame maitre +# +# 2014-10-28 : Change owner +# ============================================================================ + +# TODO +# * + +CMD="uptime" +MODE="iter" +PROGNAME=$(basename $0) +VER=1.3 +EXCLUDE="___" + +function usage () { + echo "usage: $PROGNAME [-c command] [-h] [-i] [-o] [-t seconds] [-v] [-w] [-x] host1 host2..." + echo " -c: set command (default '$CMD')" + echo " -h: help message" + echo " -i: infinity loop mode [default]" + echo " -o: only try ones" + echo " -t: timeout" + echo " -v: version message" + echo " -w: wait mode" + echo " -x: avoid master blade" + exit $@ +} + +while [ $# -gt 0 ]; do + case "$1" in + -c) shift; CMD=$1;; + -h) usage 0;; + -i) MODE="iter";; + -o) MODE="ones";; + -t) shift; [[ "$1" =~ [^0-9] ]] && { echo "incorrect timeout ($1)"; exit 1;}; TIMEOUT=$1;; + -v) echo "$PROGNAME: version $VER"; exit;; + -w) MODE="wait";; + -x) EXCLUDE="trc00";; + *) list+=" "$1;; + esac + shift +done + +# list +[ "$list" ] || list=$(awk '{sub(/#.*/, "")} /trc[0-9][0-9]/ && ! /-rf/ {print $2}' /etc/hosts) +list=$(echo $list" "|sed s/$EXCLUDE//) + +# timeout +if [ "$TIMEOUT" ]; then + trap "echo 'timeout expired (${TIMEOUT}s)'; exit 0;" SIGVTALRM + ( sleep $TIMEOUT; kill -SIGVTALRM $$ 2>/dev/null; [ $? -eq 0 ] && rc=1 || rc=0; exit $rc) & +fi +trap "exit 0;" SIGINT + +# main loop +while true; do + for host in $list; do + stat=0 + echo -n ${host}:" " + ping -c 1 $host >&/dev/null && { ssh -t -o ConnectTimeout=1 root@$host "$CMD" 2>/dev/null && stat=1 || echo "soon..."; } || echo + [ "$MODE" = "wait" -a $stat -eq 1 ] && list=${list/$host } + done + [ "$MODE" = "ones" ] && break; + [[ "$list" =~ [a-zA-Z0-9_-] ]] && sleep 1 || break; +done