rcheck: Supply a default list of hosts if none are given.
[rcheck] / rcheck
CommitLineData
f5f6d9ac
MW
1#! /bin/sh
2###
3### Run everyday health checks on remote systems.
4
5set -e
0c159fe7
MW
6prog=$0
7while
8 case "$prog" in */*) ;; *) prog=./$prog ;; esac
9 cd "${prog%/*}"
10 [ -L "${prog##*/}" ]
11do
12 prog=$(readlink "${prog##*/}")
13done
f5f6d9ac 14
66015b8c
MW
15case $# in 0) set -- $(expand-list /etc/slaves :rcheck_hosts) ;; esac
16
b742457e
MW
17exec 4>&1
18rc=0
f5f6d9ac
MW
19for host in "$@"; do
20
b742457e
MW
21 nrc=$(
22 exec 5>&1
23 { { { set +e
24 tar czf - check check.d |
25 ssh "$host" '
f5f6d9ac
MW
26set -e
27cd /tmp
28
29i=0
30while :; do
31 tmpdir=check.$$.$i
32 if mkdir -m700 $tmpdir >/dev/null 2>&1; then break; fi
33 case $i in
34 500) echo >&2 "failed to create temporary directory"; exit 125 ;;
35 esac
36 i=$((i + 1))
37done
38trap "cd /; rm -rf /tmp/$tmpdir" INT TERM QUIT HUP EXIT
39cd $tmpdir
40
41tar xzf -
42./check'
b742457e
MW
43 rc=$?; set -e; echo $rc >&5
44 case $rc in
45 0) ;;
46 *) echo >&2 "remote check process failed (rc = $rc)" ;;
47 esac
48 } 1>&3; } 2>&1 |
49 sed 's/^/!!! /'
50 } 3>&1 |
51 if IFS= read -r line; then
52 cat <<EOF
f5f6d9ac
MW
53###--------------------------------------------------------------------------
54### $host
55
56$line
57EOF
b742457e
MW
58 cat
59 fi >&4
60 )
61 if [ $nrc -gt $rc ]; then rc=$nrc; fi
f5f6d9ac 62done
b742457e
MW
63
64exit $rc