chiark / gitweb /
check.d/{disks,ntp}: Only perform the checks if relevant programs exist.
[rcheck] / rcheck
1 #! /bin/sh
2 ###
3 ### Run everyday health checks on remote systems.
4
5 set -e
6 prog=$0
7 while
8   case "$prog" in */*) ;; *) prog=./$prog ;; esac
9   cd "${prog%/*}"
10   [ -L "${prog##*/}" ]
11 do
12   prog=$(readlink "${prog##*/}")
13 done
14
15 for host in "$@"; do
16
17   { { { set +e
18         tar czf - check check.d |
19         ssh "$host" '
20 set -e
21 cd /tmp
22
23 i=0
24 while :; do
25   tmpdir=check.$$.$i
26   if mkdir -m700 $tmpdir >/dev/null 2>&1; then break; fi
27   case $i in
28     500) echo >&2 "failed to create temporary directory"; exit 125 ;;
29   esac
30   i=$((i + 1))
31 done
32 trap "cd /; rm -rf /tmp/$tmpdir" INT TERM QUIT HUP EXIT
33 cd $tmpdir
34
35 tar xzf -
36 ./check'
37         rc=$?; set -e
38         case $rc in
39           0) ;;
40           *) echo >&2 "remote check process failed (rc = $rc)" ;;
41         esac
42       } 1>&3; } 2>&1 |
43     sed 's/^/!!! /'
44   } 3>&1 |
45   if read line; then
46     cat <<EOF
47 ###--------------------------------------------------------------------------
48 ### $host
49
50 $line
51 EOF
52     cat
53   fi
54 done