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