chiark / gitweb /
check, rcheck: Propagate exit status better; capture lines more precisely.
[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
b742457e
MW
15exec 4>&1
16rc=0
f5f6d9ac
MW
17for host in "$@"; do
18
b742457e
MW
19 nrc=$(
20 exec 5>&1
21 { { { set +e
22 tar czf - check check.d |
23 ssh "$host" '
f5f6d9ac
MW
24set -e
25cd /tmp
26
27i=0
28while :; do
29 tmpdir=check.$$.$i
30 if mkdir -m700 $tmpdir >/dev/null 2>&1; then break; fi
31 case $i in
32 500) echo >&2 "failed to create temporary directory"; exit 125 ;;
33 esac
34 i=$((i + 1))
35done
36trap "cd /; rm -rf /tmp/$tmpdir" INT TERM QUIT HUP EXIT
37cd $tmpdir
38
39tar xzf -
40./check'
b742457e
MW
41 rc=$?; set -e; echo $rc >&5
42 case $rc in
43 0) ;;
44 *) echo >&2 "remote check process failed (rc = $rc)" ;;
45 esac
46 } 1>&3; } 2>&1 |
47 sed 's/^/!!! /'
48 } 3>&1 |
49 if IFS= read -r line; then
50 cat <<EOF
f5f6d9ac
MW
51###--------------------------------------------------------------------------
52### $host
53
54$line
55EOF
b742457e
MW
56 cat
57 fi >&4
58 )
59 if [ $nrc -gt $rc ]; then rc=$nrc; fi
f5f6d9ac 60done
b742457e
MW
61
62exit $rc