fix for do_backup()

This commit is contained in:
Hartmut Bauer committed 2025-03-23 01:37:19 +01:00
1 parent 22d9442b42
commit 050c3ccd9e
8 files changed
+38 -53

No files matched your search

+2 -4
View File
@@ -20,11 +20,9 @@ daily/nathan/backup.1 20GB/ 0:40h
hamiller/backup.1 35GB/ 0:35h hamiller/backup.1 35GB/ 0:35h
... ...
backup.7 backup.7
synology/backup.1/data \ synology/backup.1 60GB/ 1:40h
nfs / 60GB/ 1:40h
... ...
backup.7/data backup.7
backup.7/nfs
weekly/synology 320GB/ 9:30h weekly/synology 320GB/ 9:30h
logs/<hostname>/ logs/<hostname>/
``` ```
+4 -4
View File
@@ -9,10 +9,10 @@
# #
# je Server: # je Server:
# #
# ssh nathan sudo /var/srv/nas/Server/bin/backup/cron.sh /var/srv/nas/backups/log/nathan-backup-full.log --daily # 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-backup-full.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-backup-full.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-backup-media-full.log --weekly # 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" LOG="$1"
+2 -8
View File
@@ -2,17 +2,11 @@
NAS_ROOT=/var/srv/nas/backups 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" 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_daily1() {
BACKUP_SOURCE="/var" BACKUP_SOURCE="/var"
BACKUP_TARGET="$BACKUP_ROOT"
BACKUP_EXCLUDE_DIRS=() BACKUP_EXCLUDE_DIRS=()
} }
@@ -21,7 +15,7 @@ copy_to_nas() {
# ins NAS-Verzeichnis verschieben # ins NAS-Verzeichnis verschieben
delete_dir "$NAS_TARGET" delete_dir "$NAS_TARGET"
check_dir "$NAS_TARGET" check_dir "$NAS_TARGET"
sudo mv "$BACKUP_ROOT/*" "$NAS_TARGET" sudo mv "$BACKUP_TARGET/*" "$NAS_TARGET"
} }
before_backup() { before_backup() {
+17 -11
View File
@@ -91,7 +91,7 @@ check_directory() {
# #
delete_dir() { delete_dir() {
local dir=$1 local dir=$1
sudo rm -rf "$dir" && return 0 sudo rm -rf $dir/* && return 0
log ERROR "### could not delete directory $1!" log ERROR "### could not delete directory $1!"
# return error, so caller can decide what to do # return error, so caller can decide what to do
return 1 return 1
@@ -152,24 +152,30 @@ backup_dir() {
# hostname-scripte setzen vars und definieren Funktionen backup_daily1, 2, usw. und backup_weekly1, 2, usw. # 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.) # 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 # 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() { do_auto_backup() {
local func=$1 local func=$1
local count=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" let "count += 1"
done until ! $func$count 2>/dev/null # Seiteneffekt: $func$count wird ausgeführt (für nächste Schleife)
after_backup after_backup
} }
# TODO LOG_FILE="$NAS_ROOT/log/$HOST_NAME-backup-media.log"
backup_daily() { backup_daily() {
do_auto_backup backup_daily do_auto_backup backup_daily
} }
+4
View File
@@ -42,6 +42,8 @@ else
exit 2 exit 2
fi fi
LOG_FILE="$NAS_ROOT/log/$LOG_FILE-$(date '+%Y-%m-%d_%H%M').log"
file= file=
archive= archive=
@@ -52,10 +54,12 @@ while :; do
exit 0 exit 0
;; ;;
-d|--daily) -d|--daily)
LOG_FILE=$BACKUP_TARGET/backup.log
backup_daily backup_daily
break break
;; ;;
-w|--weekly) -w|--weekly)
LOG_FILE=$BACKUP_TARGET/backup.log
backup_weekly backup_weekly
break break
;; ;;
+2 -16
View File
@@ -1,42 +1,28 @@
#!/usr/bin/env bash #!/usr/bin/env bash
NAS_ROOT=/var/srv/nas/backups 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" 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_daily1() {
BACKUP_SOURCE="/var" BACKUP_SOURCE="/var"
BACKUP_TARGET="$BACKUP_ROOT/var"
BACKUP_EXCLUDE_DIRS=(docker) BACKUP_EXCLUDE_DIRS=(docker)
} }
backup_daily2() { backup_daily2() {
BACKUP_SOURCE="/var/docker" BACKUP_SOURCE="/var/docker"
BACKUP_TARGET="$BACKUP_ROOT/docker"
BACKUP_EXCLUDE_DIRS=(vol tmp) BACKUP_EXCLUDE_DIRS=(vol tmp)
} }
backup_daily3() { backup_daily3() {
BACKUP_SOURCE="/var/docker/vol" BACKUP_SOURCE="/var/docker/vol"
BACKUP_TARGET="$BACKUP_ROOT/vol"
BACKUP_EXCLUDE_DIRS=() BACKUP_EXCLUDE_DIRS=()
} }
copy_to_nas() { 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" delete_dir "$NAS_TARGET"
check_dir "$NAS_TARGET" check_dir "$NAS_TARGET"
sudo mv "$BACKUP_ROOT/*" "$NAS_TARGET" sudo mv "$BACKUP_TARGET/*" "$NAS_TARGET"
} }
before_backup() { before_backup() {
+2 -7
View File
@@ -2,19 +2,14 @@
NAS_ROOT=/volume1/nfs/backups 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_daily1() {
BACKUP_SOURCE="/volume1/data" 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_EXCLUDE_DIRS=("@eaDir" "Temporary Items" "lost+found")
} }
backup_daily2() { backup_daily2() {
BACKUP_SOURCE="/volume1/nfs" 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) BACKUP_EXCLUDE_DIRS=("@eaDir" "Temporary Items" "lost+found" backups)
} }
+5 -3
View File
@@ -29,11 +29,13 @@ list2() {
EXCL=("@eaDir" "Temporary Items" "lost+found") EXCL=("@eaDir" "Temporary Items" "lost+found")
ONE="eins2" ONE="eins2"
TWO="zwei2" TWO="zwei2"
return 0
#for i in "${a[@]}"; do echo "$i"; done #for i in "${a[@]}"; do echo "$i"; done
} }
EXC=() func=list3
iterate_dirs_in "." ${EXC[@]}
if ! $func 2>/dev/null ; then echo "success"; else echo "error"; fi
echo "$EXCL"
exit exit