### Run everyday health checks on remote systems.
set -e
-cd /usr/local/share/rcheck
+prog=$0
+while
+ case "$prog" in */*) ;; *) prog=./$prog ;; esac
+ cd "${prog%/*}"
+ [ -L "${prog##*/}" ]
+do
+ prog=$(readlink "${prog##*/}")
+done
-for host in "$@"; do
+args=""
+usage () {
+ echo "usage: ${0##*/} [-[MIN-][MAX]] [HOST...]"
+}
+while :; do
+ case $# in 0) break ;; esac
+ case $1 in
+ -) break ;;
+ --) shift; break ;;
+ -*[!0-9]*-* | -*-*[!0-9]*) usage >&2; exit 1 ;;
+ -*-) a=${1#-}; a=${a%-}; args="$a" ;;
+ -*-*) a=${1#-}; b=${a#*-}; a=${a%-*}; args="$a $b" ;;
+ -*[!0-9]*) usage >&2; exit 1 ;;
+ -*) a=${1#-}; args="0 $a" ;;
+ *) break ;;
+ esac
+ shift
+done
+case $# in 0) set -- $(expand-list /etc/slaves :rcheck_hosts) ;; esac
- { { { set +e
- tar czf - check check.d |
- ssh "$host" '
+exec 4>&1
+rc=0
+for host in "$@"; do
+ nrc=$(
+ exec 5>&1
+ { { { set +e
+ tar czf - check check.d |
+ ssh "$host" '
set -e
cd /tmp
cd $tmpdir
tar xzf -
-./check'
- rc=$?; set -e
- case $rc in
- 0) ;;
- *) echo >&2 "remote check process failed (rc = $rc)" ;;
- esac
- } 1>&3; } 2>&1 |
- sed 's/^/!!! /'
- } 3>&1 |
- if read line; then
- cat <<EOF
+./check'" $args"
+ rc=$?; set -e; echo $rc >&5
+ case $rc in
+ 0) ;;
+ *) echo >&2 "remote check process failed (rc = $rc)" ;;
+ esac
+ } 1>&3; } 2>&1 |
+ sed 's/^/!!! /'
+ } 3>&1 |
+ if IFS= read -r line; then
+ cat <<EOF
###--------------------------------------------------------------------------
### $host
$line
EOF
- cat
- fi
+ cat
+ fi >&4
+ )
+ if [ $nrc -gt $rc ]; then rc=$nrc; fi
done
+
+exit $rc