From 050c3ccd9e44949db2c17c979b7bcbc5305e2ecd Mon Sep 17 00:00:00 2001 From: Hartmut Bauer Date: Sun, 23 Mar 2025 01:37:19 +0100 Subject: [PATCH] fix for do_backup() --- README.md | 6 ++---- cron.sh | 8 ++++---- hamiller.sh | 10 ++-------- main.inc.sh | 28 +++++++++++++++++----------- main.sh | 4 ++++ nathan.sh | 18 ++---------------- synology.sh | 9 ++------- test.sh | 8 +++++--- 8 files changed, 38 insertions(+), 53 deletions(-) diff --git a/README.md b/README.md index 02f87fb..d494695 100644 --- a/README.md +++ b/README.md @@ -20,11 +20,9 @@ daily/nathan/backup.1 20GB/ 0:40h hamiller/backup.1 35GB/ 0:35h ... backup.7 - synology/backup.1/data \ - nfs / 60GB/ 1:40h + synology/backup.1 60GB/ 1:40h ... - backup.7/data - backup.7/nfs + backup.7 weekly/synology 320GB/ 9:30h logs// ``` diff --git a/cron.sh b/cron.sh index 106d5ac..5090663 100755 --- a/cron.sh +++ b/cron.sh @@ -9,10 +9,10 @@ # # je Server: # -# ssh nathan sudo /var/srv/nas/Server/bin/backup/cron.sh /var/srv/nas/backups/log/nathan-backup-full.log --daily -# ssh hamiller sudo /var/srv/nas/Server/bin/backup/cron.sh /var/srv/nas/backups/log/hamiller-backup-full.log --daily -# ssh synology sudo /volume1/nfs/Server/bin/backup/cron.sh /volume1/nfs/backups/log/synology-backup-full.log --daily -# ssh synology sudo /volume1/nfs/Server/bin/backup/cron.sh /volume1/nfs/backups/log/synology-backup-media-full.log --weekly +# ssh nathan sudo /var/srv/nas/Server/bin/backup/cron.sh /var/srv/nas/backups/log/nathan-daily-$(date '+%Y-%m-%d_%H%M').log --daily +# ssh hamiller sudo /var/srv/nas/Server/bin/backup/cron.sh /var/srv/nas/backups/log/hamiller-daily-$(date '+%Y-%m-%d_%H%M').log --daily +# ssh synology sudo /volume1/nfs/Server/bin/backup/cron.sh /volume1/nfs/backups/log/synology-daily-$(date '+%Y-%m-%d_%H%M').log --daily +# ssh synology sudo /volume1/nfs/Server/bin/backup/cron.sh /volume1/nfs/backups/log/synology-weekly-$(date '+%Y-%m-%d_%H%M').log --weekly # LOG="$1" diff --git a/hamiller.sh b/hamiller.sh index c142285..5b8beba 100755 --- a/hamiller.sh +++ b/hamiller.sh @@ -2,17 +2,11 @@ NAS_ROOT=/var/srv/nas/backups -BACKUP_ROOT=/var/docker/tmp +BACKUP_TARGET=/var/docker/tmp NAS_TARGET="$NAS_ROOT/daily/$HOST_NAME/backup.$DAY" -# -# ACHTUNG: BACKUP_TARGET wird für jeden Lauf _daily1, 2, usw. geköscht, -# es muss sich also für alle _daily?, bzw. _weekly? unterscheiden -# - backup_daily1() { BACKUP_SOURCE="/var" - BACKUP_TARGET="$BACKUP_ROOT" BACKUP_EXCLUDE_DIRS=() } @@ -21,7 +15,7 @@ copy_to_nas() { # ins NAS-Verzeichnis verschieben delete_dir "$NAS_TARGET" check_dir "$NAS_TARGET" - sudo mv "$BACKUP_ROOT/*" "$NAS_TARGET" + sudo mv "$BACKUP_TARGET/*" "$NAS_TARGET" } before_backup() { diff --git a/main.inc.sh b/main.inc.sh index c420e7f..f1e268d 100755 --- a/main.inc.sh +++ b/main.inc.sh @@ -91,7 +91,7 @@ check_directory() { # delete_dir() { local dir=$1 - sudo rm -rf "$dir" && return 0 + sudo rm -rf $dir/* && return 0 log ERROR "### could not delete directory $1!" # return error, so caller can decide what to do return 1 @@ -152,24 +152,30 @@ backup_dir() { # hostname-scripte setzen vars und definieren Funktionen backup_daily1, 2, usw. und backup_weekly1, 2, usw. # in den Funktionen werden die vars für den einzelnen backup gesetzt (target, excludes, usw.) # hier wird dann dass hostname-script gesourced (s.o.) und in einer Schleife werden die -# entsprechenden backup_*-Funktionen aufgerufen +# entsprechend en backup_*-Funktionen aufgerufen # do_auto_backup() { local func=$1 local count=1 - before_backup - while [ $(isFunction $func$count) ]; do - func$count - # vars defined in $func$count in $HOST_NAME.sh - delete_dir "$BACKUP_TARGET" # bei Fehler werden die Dateien hoffentlich überschrieben - check_directory "$BACKUP_TARGET" - backup_all_dirs "$BACKUP_SOURCE" "$BACKUP_TARGET" "${BACKUP_EXCLUDE_DIRS[@]}" + + if ! $func§count 2>/dev/null ; then # Seiteneffekt: $func$count wird ausgeführt + echo "ERROR: keine Backup-Functions für $HOST_NAME." + exit 1 + fi + before_backup + delete_dir "$BACKUP_TARGET" + check_directory "$BACKUP_TARGET" + # ab hier std logging (Datei ist in $BACKUP_TARGET) + + do + backup_all_dirs "$BACKUP_SOURCE" "$BACKUP_TARGET" "${BACKUP_EXCLUDE_DIRS[@]}" let "count += 1" - done + until ! $func$count 2>/dev/null # Seiteneffekt: $func$count wird ausgeführt (für nächste Schleife) + after_backup } -# TODO LOG_FILE="$NAS_ROOT/log/$HOST_NAME-backup-media.log" + backup_daily() { do_auto_backup backup_daily } diff --git a/main.sh b/main.sh index 31890d6..7b44475 100755 --- a/main.sh +++ b/main.sh @@ -42,6 +42,8 @@ else exit 2 fi +LOG_FILE="$NAS_ROOT/log/$LOG_FILE-$(date '+%Y-%m-%d_%H%M').log" + file= archive= @@ -52,10 +54,12 @@ while :; do exit 0 ;; -d|--daily) + LOG_FILE=$BACKUP_TARGET/backup.log backup_daily break ;; -w|--weekly) + LOG_FILE=$BACKUP_TARGET/backup.log backup_weekly break ;; diff --git a/nathan.sh b/nathan.sh index b6e2427..0427d17 100755 --- a/nathan.sh +++ b/nathan.sh @@ -1,42 +1,28 @@ #!/usr/bin/env bash NAS_ROOT=/var/srv/nas/backups -BACKUP_ROOT=/var/docker/tmp +BACKUP_TARGET=/var/docker/tmp NAS_TARGET="$NAS_ROOT/daily/$HOST_NAME/backup.$DAY" -# -# ACHTUNG: BACKUP_TARGET wird für jeden Lauf _daily1, 2, usw. geköscht, -# es muss sich also für alle _daily?, bzw. _weekly? unterscheiden -# - backup_daily1() { BACKUP_SOURCE="/var" - BACKUP_TARGET="$BACKUP_ROOT/var" BACKUP_EXCLUDE_DIRS=(docker) } backup_daily2() { BACKUP_SOURCE="/var/docker" - BACKUP_TARGET="$BACKUP_ROOT/docker" BACKUP_EXCLUDE_DIRS=(vol tmp) } backup_daily3() { BACKUP_SOURCE="/var/docker/vol" - BACKUP_TARGET="$BACKUP_ROOT/vol" BACKUP_EXCLUDE_DIRS=() } copy_to_nas() { - local dir - # einzelne backups iin einem Verzeichnis sammeln - for dir in $(iterate_dirs_in "$BACKUP_ROOT" "$@"); do - sudo mv "$BACKUP_ROOT/$dir/*" .. && rmdir "$BACKUP_ROOT/$dir" - done - # ins NAS-Verzeichnis verschieben delete_dir "$NAS_TARGET" check_dir "$NAS_TARGET" - sudo mv "$BACKUP_ROOT/*" "$NAS_TARGET" + sudo mv "$BACKUP_TARGET/*" "$NAS_TARGET" } before_backup() { diff --git a/synology.sh b/synology.sh index e23990c..f2e3553 100755 --- a/synology.sh +++ b/synology.sh @@ -2,19 +2,14 @@ NAS_ROOT=/volume1/nfs/backups -# -# ACHTUNG: BACKUP_TARGET wird für jeden Lauf _daily1, 2, usw. geköscht, -# es muss sich also für alle _daily?, bzw. _weekly? unterscheiden -# - backup_daily1() { BACKUP_SOURCE="/volume1/data" - BACKUP_TARGET="$NAS_ROOT/daily/$HOST_NAME/backup.$DAY/data" + BACKUP_TARGET="$NAS_ROOT/daily/$HOST_NAME/backup.$DAY" BACKUP_EXCLUDE_DIRS=("@eaDir" "Temporary Items" "lost+found") } backup_daily2() { BACKUP_SOURCE="/volume1/nfs" - BACKUP_TARGET="$NAS_ROOT/daily/$HOST_NAME/backup.$DAY/nfs" + BACKUP_TARGET="$NAS_ROOT/daily/$HOST_NAME/backup.$DAY" BACKUP_EXCLUDE_DIRS=("@eaDir" "Temporary Items" "lost+found" backups) } diff --git a/test.sh b/test.sh index 8f45879..99645ed 100755 --- a/test.sh +++ b/test.sh @@ -29,11 +29,13 @@ list2() { EXCL=("@eaDir" "Temporary Items" "lost+found") ONE="eins2" TWO="zwei2" - + return 0 #for i in "${a[@]}"; do echo "$i"; done } -EXC=() -iterate_dirs_in "." ${EXC[@]} +func=list3 + +if ! $func 2>/dev/null ; then echo "success"; else echo "error"; fi +echo "$EXCL" exit