#!/bin/bash # ============================================================================== # # check status of last performed backup # # This script checks the last logfile and scans for errors # An error is a returncode <> 0 or a too old logfile # # ------------------------------------------------------------------------------ # # ah - Axel Hahn <axel.hahn@iml.unibe.ch> # ds - Daniel Schueler <daniel.schueler@iml.unibe.ch> # # 2016-12-09 ah,ds v1.0 # 2022-01-19 ah v1.1 fixes with shellcheck # ============================================================================== . $(dirname $0)/jobhelper.sh # ------------------------------------------------------------------------------ # CONFIG # ------------------------------------------------------------------------------ typeset -i iOK=0 # limit when to warn if no backup was started typeset -i iMaxAgeInHours=96 typeset -i iAge typeset -i iAge2 typeset -i iError logdir=$(dirname "$0")/logs # ------------------------------------------------------------------------------ # MAIN # ------------------------------------------------------------------------------ sShort="Client Backup -" ls "$logdir"/*.log >/dev/null if [ $? -ne 0 ]; then sShort="$sShort logs were not found. Backup was never executed" iError=1 else # iMaxAgeInHours=`j_getLastBackupAge` # echo verify last backup: $iMaxAgeInHours h ago for logfile in $(ls -1t "$logdir"/inc*.log "$logdir"/full*.log "$logdir"/auto*.log 2>/dev/null | head -1) do echo LAST BACKUP: "$logfile" grep "final.*rc=" "$logfile" echo # --- SENSU Statusline if [ -f "$(dirname $0)"/transfer.sh ]; then sShort="$sShort WITH" else sShort="$sShort NO" fi sShort="$sShort transfer -" # --- count returncodes iOK=$(grep -c "final.*rc=0$" "$logfile" ) iError=$(grep "final.*rc=" "$logfile" | grep -cv "rc=0$") echo "OK: $iOK ... Errors: $iError" # --- rc=0 must be here if [ $iOK -eq 0 ]; then echo "ERROR: no OK message was found. Something is messed up :-/" iError=$iError+1 fi # --- check age iAge=$( date +%s )-$( date +%s -r "$logfile" ) iAge2=$iAge/60/60 echo "age: $iAge sec ... $iAge2 h" sShort="$sShort last backup log: $(basename "$logfile") ($iAge2 h ago) " if [ $iAge2 -gt $iMaxAgeInHours ]; then echo "Error: the last backup is older than $iMaxAgeInHours hours" sShort="$sShort ERROR: backup is older than $iMaxAgeInHours hours " iError=$iError+1 else echo "OK: last backup is younger $iMaxAgeInHours hours" sShort="$sShort OK: backup is younger than $iMaxAgeInHours hours " fi # --- changes (incremental backups only) and backup status infos echo sSearch="Args:|ElapsedTime|SourceFiles|SourceFileSize|RawDeltaSize" echo "$logfile" | grep -F "inc" >/dev/null if [ $? -eq 0 ]; then sSearch="[ADM]\ |${sSearch}" fi echo --- changes: grep -E "^(${sSearch})" "$logfile" echo echo --- summary of backed up directories: grep "DIR\ " "$logfile" sShort="$sShort - OK: $iOK ... Errors: $iError" done fi echo echo "MONITORINFO: $sShort" echo "STATUS $0 - final returncode rc=$iError" exit "$iError" # ------------------------------------------------------------------------------