#!/bin/sh # clcmd v1.2 (c) 9.10.2003 by Andreas Ley (u) 1.12.2011 # Cluster Command PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/bin/X11:/usr/machine/bin:/usr/machine/sbin export PATH usage() { echo "Usage: `basename $0` [-v] [-f] [-d host] command [parameter [...]]" >&2 echo "-v verbose mode" >&2 echo "-f force (don't interrupt on command failure)" >&2 echo "-d destination host" >&2 exit 1 } trace=false verbose=false force=false unset host while getopts hxvfd: OPTION; do case ${OPTION} in h) sed '1d;s/^# *//;/^$/q' $0; usage;; x) set -x; trace=true;; v) verbose=true;; f) force=true;; d) host="${OPTARG}";; ?) usage;; esac done _XPG=1 shift $((${OPTIND} - 1)) test $# -eq 0 && usage ${force} || set -e localnode="`hostname`" localfqdn="`getfqdn`" ssh="/usr/bin/ssh -a -k -x" test -x /usr/bin/ssh || ssh="/usr/machine/bin/ssh1 -a -k -x" fping -a -r1 ${host} /dev/null | while read node; do if test "${node}" = "${localnode}" -o "${node}" = "test-${localnode}" -o "${node}" = "${localfqdn}"; then ${verbose} && echo "*** Local node: ${node} ***" eval ${cmd} "$@" else ${verbose} && echo "*** Remote node: ${node} ***" ${ssh} -n -a -k -x "${node}" exec "$@" fi done exit 0