aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rwxr-xr-xtemplates/checkbackups.sh73
1 files changed, 73 insertions, 0 deletions
diff --git a/templates/checkbackups.sh b/templates/checkbackups.sh
new file mode 100755
index 0000000..8d143a3
--- /dev/null
+++ b/templates/checkbackups.sh
@@ -0,0 +1,73 @@
+#!/bin/sh
+
+# This script is designed to check a backup directory populated with
+# subdirectories named after hosts, within which there are backups of various
+# types.
+#
+# Example:
+# /home/backup:
+# foo.example.com
+#
+# foo.example.com:
+# rdiff-backup .ssh
+#
+# rdiff-backup:
+# root home rdiff-backup-data usr var
+#
+# There are heuristics to determine the backup type. Currently, the following
+# types are supported:
+#
+# rdiff-backup: assumes there is a rdiff-backup/rdiff-backup-data/backup.log file
+# duplicity: assumes there is a dup subdirectory, checks the latest file
+# dump files: assumes there is a dump subdirectory, checks the latest file
+#
+# This script returns output suitable for send_nsca to send the results to
+# nagios and should therefore be used like this:
+#
+# checkbackups.sh | send_nsca -H nagios.example.com
+
+# XXX: taken from utils.sh from nagios-plugins-basic
+STATE_OK=0
+STATE_WARNING=1
+STATE_CRITICAL=2
+STATE_UNKNOWN=3
+STATE_DEPENDENT=4
+
+backupdir="<%= real_backupdir -%>"
+
+# XXX: this should be a complete backup registry instead
+hosts=`ls $backupdir`
+stampfile=$backupdir/.stamp
+
+cd $backupdir
+for host in $hosts; do
+ flag=""
+ type="unknown"
+ if [ -d $host ]; then
+ # guess the backup type and find a proper stamp file to compare
+ # XXX: this doesn't check if the backup was actually successful
+ # XXX: the backup type should be part of the machine registry
+ if [ -d $host/rdiff-backup ]; then
+ flag=$host/rdiff-backup/rdiff-backup-data/backup.log
+ type="rdiff"
+ elif [ -d $host/dump ]; then
+ flag="$host/dump/`ls -tr $host/dump | tail -1`"
+ type="dump"
+ elif [ -d $host/dup ]; then
+ flag="$host/dup/`ls -tr $host/dup | tail -1`"
+ type="duplicity"
+ else
+ printf "$host\tbackups\t$STATE_UNKNOWN\tUNKNOWN unknown system\n"
+ continue
+ fi
+ touch -t `date +%Y%m%d0000.00` $stampfile
+ date=`ls -l $flag | awk '{print $6 " " $7}'`
+ if [ $flag -nt $stampfile ]; then
+ printf "$host\tbackups\t$STATE_OK\tOK timestamp $date\n"
+ else
+ printf "$host\tbackups\t$STATE_CRITICAL\tCRITICAL timestamp $date\n"
+ fi
+ else
+ printf "$host\tbackups\t$STATE_UNKNOWN\tUNKNOWN timestamp no directory\n"
+ fi
+done