]> arthur.barton.de Git - backup-script.git/blobdiff - bin/backup-status
backup-script-wrapper: Return exit code of backup-script
[backup-script.git] / bin / backup-status
index 5a524574a41e2421b38a3795190112043d6e1a97..4a181801b21537f700ee677932c568a888f4101b 100755 (executable)
@@ -1,7 +1,7 @@
 #!/bin/bash
 #
 # backup-script system for cloning systems using rsync
-# Copyright (c)2008-2013 Alexander Barton, alex@barton.de
+# Copyright (c)2008-2015 Alexander Barton, alex@barton.de
 #
 # This program is free software; you can redistribute it and/or modify
 # it under the terms of the GNU General Public License as published by
 #
 
 NAME=`basename $0`
-CONF_D="/etc/backup-script.d"
 QUICK=0
 
 export LC_ALL=C
 
 declare -i count=0
+declare -i snapshots=0
 
+# Default settings, can be overwritten in backup-script.conf:
+conf_d="/etc/backup-script.d"
 default_target=""
-default_user="root"
+default_generations=0
+
+for conf in "/etc/backup-script.conf" "${conf_d}/backup-script.conf"; do
+       if [ -r "$conf" ]; then
+               source "$conf"
+       fi
+done
+
+Check_Size() {
+       # $1: directory
+       # $2: padding
+
+       if [ "$QUICK" = "0" ]; then
+               size=`du -Hhs "$1" | cut -f1`
+               echo "$2  - Size:" $size
+       fi
+}
+
+Check_Stamp() {
+       # $1: stamp file
+       # $2: padding
+
+       if [ -f "$1" ]; then
+               if [ `uname` = "Linux" ]; then
+                       last=`LC_ALL=C stat "$1" | grep "^Modify: " \
+                        | cut -d':' -f2- | cut -d. -f1`
+               else
+                       last=`LC_ALL=C stat -f "%Sc" "$1"`
+               fi
+               [ -n "$last" ] && echo "$2  - Date:" $last
+               unset code
+               source "$1"
+               case "$code" in
+                 0)    txt=", OK"; ;;
+                 24)   txt=", WARNING (some files vanished during backup)"; ;;
+                 *)    txt=", ERROR"
+               esac
+               [ -n "$code" ] && echo "$2  - Result code: $code$txt"
+       else
+               echo "$2  - No timestamp recorded! Backup currently running or aborted?"
+       fi
+}
 
 if [ "$1" == "-q" ]; then
        QUICK=1
@@ -28,58 +71,70 @@ fi
 
 case "$1" in
     "-"*)
-       echo "Usage: $NAME [-p] [<system> [<system> [...]]]"
+       echo "Usage: $NAME [-q] [<system> [<system> [...]]]"
        exit 1
        ;;
 esac
 
 if [ $# -ge 1 ]; then
        for s in $@; do
-               if [ ! -r "${CONF_D}/$s" ]; then
-                       echo "$NAME: Can' read \"${CONF_D}/$s\"!"
+               if [ ! -r "${conf_d}/$s" ]; then
+                       echo "$NAME: Can' read \"${conf_d}/$s\"!"
                        exit 1
                fi
-               sys="$sys ${CONF_D}/$s"
+               sys="$sys ${conf_d}/$s"
        done
 else
-       sys=${CONF_D}/*
+       sys=${conf_d}/*
 fi
 
-[ -r "${CONF_D}/backup-script.conf" ] && source "${CONF_D}/backup-script.conf"
+[ -r "${conf_d}/backup-script.conf" ] && source "${conf_d}/backup-script.conf"
 
 for f in $sys; do
        [ -r "$f" -a -f "$f" ] || continue
 
-       system=`basename $f`
-       target="$default_target"
-
-       case "$system" in
+       fname=`basename $f`
+       case "$fname" in
                "backup-script.conf"|*.sh)
                        continue
                        ;;
        esac
 
-       # Read in configuration file
+       # Set global defaults
+       system="$fname"
+       target="$default_target"
+       generations="$default_generations"
+
+       # Read in system configuration file
        source "$f"
 
+       # Validate configuration
+       [ "$system" = "localhost" -o "$system" = "127.0.0.1" ] && local=1
+
        destdir="$target"
        target="$target/$system"
 
        [ -d "$target" ] || continue
 
-       echo "-- $system -- "
-       echo "Storage: $target"
-       if [ "$QUICK" = "0" ]; then
-               size=$( du -sh "$target" | cut -f1 )
-               echo "Size: $size"
-       fi
-       if [ -f "$target/.stamp" ]; then
-               stat "$target/.stamp" | grep "^Modify: " | cut -d. -f1
-               unset code
-               source "$target/.stamp"
-               [ -n "$code" ] && echo "Result code: $code"
+       # System name
+       [ "$system" = "$fname" ] && echo "$fname" || echo "$fname [$system]"
+
+       # System target directory
+       echo "- Target: $target"
+
+       if [ $generations -gt 0 ]; then
+               for s in $target/current $target/[0-9]*-[0-9]*; do
+                       [ -e "$s" ] || continue
+                       echo "  - Snapshot: $s"
+                       Check_Size "$s" "  "
+                       Check_Stamp "$s/.stamp" "  "
+                       snapshots=$snapshots+1
+               done
        else
-               echo "No timestamp recorded!?"
+               # Timestamp and result code
+               Check_Size "$target"
+               Check_Stamp "$target/.stamp"
+               snapshots=$snapshots+1
        fi
 
        count=$count+1
@@ -90,6 +145,8 @@ if [ $count -lt 1 ]; then
        echo "No backups found!"
        exit 1
 fi
-echo "$count system backups found."
+[ $count -eq 1 ] && sc="" || sc="s"
+[ $snapshots -eq 1 ] && ss="" || ss="s"
+echo "$count system backup$sc found, $snapshots snapshot$ss."
 
 # -eof-