| 1 | #! /bin/sh |
| 2 | ### |
| 3 | ### Run a collection of everyday health checks. |
| 4 | |
| 5 | set -e |
| 6 | |
| 7 | fix () { |
| 8 | n=$1 |
| 9 | while :; do |
| 10 | case $n in |
| 11 | 0) break ;; |
| 12 | 0*) n=${n#0} ;; |
| 13 | *) break ;; |
| 14 | esac |
| 15 | done |
| 16 | echo $n |
| 17 | } |
| 18 | min=$(fix ${1-0}) max=$(fix ${2-99}) |
| 19 | |
| 20 | exec 4>&1 |
| 21 | rc=0 |
| 22 | for check in check.d/[!#]*[!~]; do |
| 23 | base=${check##*/} |
| 24 | seq=${base%%[!0-9]*} |
| 25 | if [ $min -gt $seq -o $seq -gt $max ]; then continue; fi |
| 26 | |
| 27 | nrc=$( |
| 28 | exec 5>&1 |
| 29 | { { { set +e; "$check"; rc=$?; set -e |
| 30 | echo $rc >&5 |
| 31 | case $rc in 0) ;; *) echo >&2 "failed (rc = $rc)" ;; esac |
| 32 | } >&3; } 2>&1 | |
| 33 | sed 's/^/E: /' |
| 34 | } 3>&1 | { |
| 35 | if IFS= read -r line; then |
| 36 | echo "## ${check##*/}" |
| 37 | echo "$line" |
| 38 | cat |
| 39 | echo |
| 40 | fi |
| 41 | } >&4 |
| 42 | ) |
| 43 | if [ $nrc -gt $rc ]; then rc=$nrc; fi |
| 44 | done |
| 45 | |
| 46 | exit $rc |