diff options
-rwxr-xr-x | templates/checkbackups.sh | 73 |
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 |