#!/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 # 2022-02-09 ah v1.2 update after changes in logging # 2022-10-07 ah v1.3 unescape regex with space to prevent "grep: warning: stray \ before white space" # ============================================================================== . $(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 backuplogfile=$(ls -1t "$logdir"/inc*.log "$logdir"/full*.log "$logdir"/auto*.log 2>/dev/null | head -1) transferlogfile=$(ls -1t "$logdir"/transfer*.log | head -1) logfile="${backuplogfile} ${transferlogfile}" lastlogfile="$(ls -1t $logfile | head -1)" echo LAST BACKUP: "$logfile" echo echo ">>> RETURNCODES" grep "final.*rc=" $logfile # --- Monitoring Statusline if [ -f "$(dirname $0)"/transfer.sh ]; then sShort="$sShort WITH" else sShort="$sShort NO" fi sShort="$sShort transfer -" # --- count returncodes iOK=$(grep "final.*rc=0$" $logfile | wc -l ) iError=$(grep "final.*rc=" $logfile | grep -v "rc=0$" | wc -l ) 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+=1 fi # --- check age echo echo ">>> AGE" iAge=$( date +%s )-$( date +%s -r "$lastlogfile" ) iAge2=$iAge/60/60 echo "age: $iAge sec ... $iAge2 h" sShort="$sShort last backup log: $(basename "$lastlogfile") ($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+=1 else echo "OK: last backup is younger $iMaxAgeInHours hours" sShort="$sShort OK: backup is younger than $iMaxAgeInHours hours " iOK+=1 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:" # cat $logfile | grep "DIR " echo ">>> Summary of backup actions:" cat $logfile | grep "__[A-Z][A-Z]*__" sShort="$sShort - OK: $iOK ... Errors: $iError" # done fi echo echo "MONITORINFO: $sShort" echo "STATUS $0 - final returncode rc=$iError" exit "$iError" # ------------------------------------------------------------------------------