Export, Fixes, 1st production version

This commit is contained in:
Hartmut Bauer committed 2025-04-10 22:26:32 +02:00
1 parent d7dd6cc92f
commit 3e21cfa0fc
9 files changed
+376 -104

No files matched your search

+1 -1
View File
@@ -1,3 +1,3 @@
#!/usr/bin/env bash
cp *.sh ../../bin/backup
cp -v *.sh ../../bin/backup
+3 -19
View File
@@ -1,22 +1,6 @@
#!/usr/bin/env bash
#
# Aufruf via ssh auf dem jew. Server
#
# $1 - Logfile für den Backup-Lauf
#
# cron job auf nathan
#
# je Server:
#
# 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"
shift
HERE=$(dirname "$0")
$HERE/main.sh "$@" >"$LOG" 2>&1 &
# local start
sudo sh -c "nohup $HERE/main.sh -d </dev/null &"
+6 -1
View File
@@ -7,8 +7,13 @@ NAS_TARGET="$NAS_ROOT/daily/$HOST_NAME/backup.$DAY"
backup_daily1() {
BACKUP_SOURCE="/var"
BACKUP_EXCLUDE_DIRS=()
BACKUP_EXCLUDE_DIRS=(docker)
}
backup_daily2() {
BACKUP_SOURCE="/var/docker"
BACKUP_EXCLUDE_DIRS=(tmp)
}
before_backup() {
stop_docker
+1 -1
View File
@@ -27,7 +27,7 @@ else
fi
if [ "$myip" != "$MAILSERVER_IP" ]; then
SSH="ssh $MAILSERVER_IP "
SSH="ssh $MAILSERVER_IP"
fi
TO=$1
+310 -70
View File
@@ -1,14 +1,21 @@
VER="2.0.0-beta-4"
HOST_NAME=$(hostname -s)
DAY=$(date +%u) # MO == 1
HOST_NAME=$(hostname)
DAY=$(date +%u)
BACKUP_MASTER_CHECK="/var/docker/vol/proxy"
NAS_HOSTNAME=synology
NAS_IP=10.4.2.20
NAS_SCRIPT=/volume1/nfs/Server/bin/backup/main.sh
WEEKLY_DAY=1 # SO->MO
PASSPHRASE=1234567890
EXT=tgz.gpg
LIST_EXT=txt
LOG_RECIPIENT=hb242@pm.me
DOCKER="/usr/bin/docker compose -f /var/docker/run/docker-compose.yml --ansi never"
LOG_RECIPIENT=hb242@pm.me
INFO=INFO
WARN=WARN
ERROR=ERROR
@@ -20,38 +27,62 @@ ERR="###"
DBG="==="
dump_mariadb() {
# TODO
echo
log $DEBUG "$DBG dump_mariadb( $@ )"
local dump_dir=$1
local mysqlconnect="--user=root --password=snafu"
log $DEBUG "$DBG > \$DOCKER exec mysql /usr/bin/mariadb --silent --user=xxx --password=xxx -e \"show databases\" -B"
for db in $($DOCKER exec mysql /usr/bin/mariadb --silent $mysqlconnect -e "show databases" -B 2>>$LOG_FILE | grep -v information_schema 2>>$LOG_FILE | grep -v performance_schema 2>>$LOG_FILE | sed -e 's/\r//' 2>>$LOG_FILE); do
log $DEBUG "$DBG > \$DOCKER exec mysql /usr/bin/mariadb-dump --hex-blob --user=xxx --password=xxx --databases $db"
$DOCKER exec mysql /usr/bin/mariadb-dump --hex-blob $mysqlconnect --databases $db >$dump_dir/$db.sql 2>>$LOG_FILE
is_error $? false && return 1
done
return 0
}
dump_postgresql() {
# TODO
echo
}
log $DEBUG "$DBG dump_postgresql( $@ )"
local dump_dir=$1
# users and roles
log $DEBUG "$DBG > \$DOCKER exec -u=postgres postgres pg_dumpall --globals-only"
$DOCKER exec -u=postgres postgres pg_dumpall --globals-only > $dump_dir/_globals.sql 2>>$LOG_FILE
# docker compose ausführen
#
# $1 ff. - compose parameter, z.B. up -d
#
run_docker() {
log $DEBUG "$DBG run_docker $@"
#DEBUG ohne docker stop/start
log $DEBUG "$DBG \$DOCKER exec -u=postgres postgres psql -t -c \"select datname from pg_database where not datistemplate\""
for db in $($DOCKER exec -u=postgres postgres psql -t -c "select datname from pg_database where not datistemplate" 2>>$LOG_FILE); do
log $DEBUG "$DBG > \$DOCKER exec -u=postgres postgres pg_dump --create $db"
$DOCKER exec -u=postgres postgres pg_dump --create $db > $dump_dir/$db.sql 2>>$LOG_FILE
is_error $? false && return 1
done
return 0
log $DEBUG "$DBG > /usr/bin/docker compose -f /var/docker/run/docker-compose.yml --ansi never $@"
/usr/bin/docker compose -f /var/docker/run/docker-compose.yml --ansi never $@ >>$LOG_FILE 2>&1
return $?
}
start_docker() {
log $DEBUG "$DBG start_docker"
return $(run_docker up -d)
log $DEBUG "$DBG start_docker()"
log $DEBUG "$DBG > \$DOCKER up -d"
$DOCKER up -d >>$LOG_FILE 2>&1
return $?
}
stop_docker() {
log $DEBUG "$DBG stop_docker"
return $(run_docker down)
log $DEBUG "$DBG stop_docker()"
log $DEBUG "$DBG > \$DOCKER down"
$DOCKER down >>$LOG_FILE 2>&1
return $?
}
# Script per ssh auf Server $1 im Hintergrund starten
#
# ssh start in background
# -> https://stackoverflow.com/questions/29142/getting-ssh-to-execute-a-command-in-the-background-on-target-machine#comment107117479_29172
#
# $1 - Server
# $@ - Script incl. Parameter
#
run_script_remote() {
local server=$1
shift
ssh $server "sudo sh -c 'nohup $@ &>/dev/null </dev/null &'"
}
# check if function $1 exists
@@ -94,7 +125,9 @@ mail_log() {
# Reduziertes Log senden
#
send_mail_log() {
log $DEBUG "$DBG > $HERE/mail.sh $LOG_RECIPIENT \"[$HOST_NAME] Nightly Backup\" $MAIL_LOG_FILE"
local subject="$@"
log $DEBUG "$DBG send_mail_log()"
log $DEBUG "$DBG > $HERE/mail.sh $LOG_RECIPIENT \"[$HOST_NAME] $subject\" $MAIL_LOG_FILE"
$HERE/mail.sh $LOG_RECIPIENT "[$HOST_NAME] Nightly Backup" $MAIL_LOG_FILE >>$LOG_FILE 2>&1
}
@@ -109,7 +142,7 @@ is_error() {
local rc=$1
local mlog=$2
if [ $rc -eq 0 ]; then
if [ "$mlog" ]; then
if [ -z "$mlog" ]; then
mail_log $INFO "$SUCCESS"
fi
return 1
@@ -150,14 +183,17 @@ check_pipe_rc() {
# returns return code of mv
#
copy_to_nas() {
log $DEBUG "$DBG copy_to_nas $@"
log $DEBUG "$DBG copy_to_nas( $@ )"
local source="$1"
local target="$2"
delete_dir "$target"
if [ $(check_directory "$target") -gt 0 ]; then
log $ERROR "$ERR directory \"$target\" not found"
if [ $? -ne 0 ]; then
log $ERROR "$ERR directory \"$target\" could not be emptied"
return 1
fi
check_directory "$target"
is_error $? true && return 1
log $DEBUG "$DBG > mv \"$source\"/* \"$target\""
mv "$source"/* "$target" >>$LOG_FILE 2>&1
return $?
@@ -200,7 +236,7 @@ iterate_dirs_in() {
# returns 0 for success, 1 otherwise
#
check_directory() {
log $DEBUG "$DBG check_directory $@"
log $DEBUG "$DBG check_directory( $@ )"
local dir=$1
if [ -d "$1" ]; then
return 0
@@ -221,7 +257,7 @@ check_directory() {
# returns 0 for success, 1 otherwise
#
delete_dir() {
log $DEBUG "$DBG delete_dir $@"
log $DEBUG "$DBG delete_dir( $@ )"
local dir=$1
log $DEBUG "$DBG > rm -rf \"$dir\"/*"
rm -rf "$dir"/* >>$LOG_FILE 2>&1 && return 0
@@ -242,10 +278,10 @@ backup_file_prefix() {
# $2 - Zielverzeichnis für .tgz.gpg-Dateien
# $3 ff. - Verzeichnisse, die nicht gesichert werden sollen (kann leer bleiben)
#
# returns 0 for success, 1 otherwise
# returns 0 for success, 1 otherwise (Fehlerprotokollierung muss aufrufende fn erledigen)
#
backup_all_dirs() {
log $DEBUG "$DBG backup_all_dirs $@"
log $DEBUG "$DBG backup_all_dirs( $@ )"
local root=$1
local target=$2
shift 2
@@ -255,17 +291,15 @@ backup_all_dirs() {
for dir in $(iterate_dirs_in "$root" "$@"); do
tar_file="$target/$prefix-$dir.$EXT"
mail_log $INFO "$INF directory: $root/$dir"
backup_dir "$root" "$tar_file" "$dir"
is_error $? false && return 1
if [ $? -ne 0 ]; then return 1; fi
#mail_log $INFO "$INF list directory"
create_list "$tar_file" "$dir"
is_error $? false && return 1
if [ $? -ne 0 ]; then return 1; fi
#mail_log $INFO "$INF test integrity of $tar_file"
test_integrity "$tar_file"
is_error $? false && return 1
if [ $? -ne 0 ]; then return 1; fi
done
return 0
}
@@ -279,7 +313,7 @@ backup_all_dirs() {
# returns 0 for success, 1 otherwise
#
backup_dir() {
log $DEBUG "$DBG backup_dir $@"
log $DEBUG "$DBG backup_dir( $@ )"
local root=$1
local archive=$2
local dir=$3
@@ -300,15 +334,16 @@ backup_dir() {
# returns 0 for success, 1 otherwise
#
do_auto_backup() {
log $DEBUG "$DBG do_auto_backup $@"
log $DEBUG "$DBG do_auto_backup( $@ )"
local func=$1
local count=1
local rc
if ! $func$count 2>/dev/null ; then # Seiteneffekt: $func$count wird ausgeführt
mail_log $ERROR "$ERR keine Backup-Function $func$count() für $HOST_NAME."
exit 1
exit 1 # kein Mail-Benachrichtigung!
fi
set_log_info
mail_log $INFO "$INF prepare backup"
before_backup
@@ -324,40 +359,60 @@ do_auto_backup() {
do
mail_log $INFO "$INF backing up directories in $BACKUP_SOURCE"
backup_all_dirs "$BACKUP_SOURCE" "$BACKUP_TARGET" "${BACKUP_EXCLUDE_DIRS[@]}"
rc=$?
# error logging in backup_all_dirs
if [ $rc -gt 0 ]; then
return 1
fi
is_error $? && return 1
let "count += 1"
done
mail_log $INFO "$INF finishing backup"
after_backup
is_error $? && return 1
}
set_log_info() {
local targ
if [ -z "$NAS_TARGET" ]; then
targ=$BACKUP_TARGET
else
targ=$NAS_TARGET
fi
mail_log $INFO ">>> "
mail_log $INFO ">>> backup to : $targ"
mail_log $INFO ">>> log file : $LOG_FILE"
mail_log $INFO ">>> "
}
backup_daily() {
# "master"-Server startet Backup auf NAS
if [ -d $BACKUP_MASTER_CHECK ]; then
log $DEBUG "$DBG starting daily backup on $NAS_HOSTNAME"
run_script_remote $NAS_IP "$NAS_SCRIPT -d"
fi
mail_log $INFO ">>>>>>>>>> daily auto backup $VER for $HOST_NAME <<<<<<<<<<"
do_auto_backup backup_daily
# after_backup() muss immer laufen, damit ggf. docker wieder gestartet werden kann
mail_log $INFO "$INF finishing backup"
after_backup
is_error $?
mail_log $INFO ">>>>>>>>>> end of auto backup"
send_mail_log
send_mail_log "Daily Backup"
# ggf. weekly backup starten (z.ZT. nur auf NAS)
if [ $HAS_WEEKLY -a $WEEKLY_DAY -eq $DAY ]; then
log $DEBUG "$DBG starting weekly backup"
nohup $THIS_SCRIPT -w &>>$LOG_FILE </dev/null &
fi
}
backup_weekly() {
mail_log $INFO ">>>>>>>>>> weekly auto backup $VER for $HOST_NAME <<<<<<<<<<"
do_auto_backuo backup_weekly
mail_log $INFO ">>>>>>>>>> end of auto backup"
send_mail_log
}
export_backups() {
# TODO
echo
# check host (only nathan|hamiller?)
# check USB drive
# del USB drive (?)
# rsync USB -> 1|2, video, serien
# send_mail_log
do_auto_backup backup_weekly
mail_log $INFO "$INF finishing backup"
after_backup
is_error $?
mail_log $INFO ">>>>>>>>>> end of auto backup"
send_mail_log "Weekly Backup"
}
# Inhalt des Archivs in eine Textdatei ausgeben.
@@ -367,7 +422,7 @@ export_backups() {
# returns 0 for success, 1 otherwise
#
create_list() {
log $DEBUG "$DBG create_list $@"
log $DEBUG "$DBG create_list( $@ )"
local archive=$1
log $DEBUG "$DBG > gpg --batch --decrypt --passphrase xxxx \"$archive\" | tar -tzv | tee \"$archive.$LIST_EXT\""
gpg --batch --decrypt --passphrase $PASSPHRASE "$archive" 2>>$LOG_FILE | tar -tzv 2>>$LOG_FILE | tee "$archive.$LIST_EXT" >/dev/null 2>>$LOG_FILE
@@ -383,7 +438,7 @@ create_list() {
# returns 0 for success, 1 otherwise
#
test_integrity() {
log $DEBUG "$DBG test_integrity $@"
log $DEBUG "$DBG test_integrity( $@ )"
local archive=$1
log $DEBUG "$DBG > gpg --batch --decrypt --passphrase xxxx \"$archive\" | tar -xzO"
gpg --batch --decrypt --passphrase $PASSPHRASE "$archive" 2>>$LOG_FILE | tar -xzO >/dev/null 2>>$LOG_FILE
@@ -401,7 +456,7 @@ test_integrity() {
# returns 0 for success, 1 otherwise
#
restore() {
log $DEBUG "$DBG restore $@"
log $DEBUG "$DBG restore( $@ )"
local archive=$1
shift 1
log $DEBUG "$DBG > gpg --batch --decrypt --passphrase xxxx \"$archive\" | tar -xzv $@"
@@ -425,7 +480,7 @@ restore() {
# returns 0 for success, 1 otherwise
#
list_archives() {
log $DEBUG "$DBG list_archives $@"
log $DEBUG "$DBG list_archives( $@ )"
local target=$1
local targ=${target//\//\\\/} # slashes escapen
log $DEBUG "$DBG > find \"$target\" -type f -name \"*.$EXT\" | grep \"${HOST_NAME}/\" | sed -E \"s/^$targ//\""
@@ -442,9 +497,194 @@ list_archives() {
# returns 0 for success, 1 otherwise
#
list_archive_content() {
log $DEBUG "$DBG list_archive_content $@"
log $DEBUG "$DBG list_archive_content( $@ )"
local root=$1
local archive=$2
log $DEBUG "$DBG > cat \"$root/${archive/#\//}.$LIST_EXT\""
cat "$root/${archive/#\//}.$LIST_EXT" 2>>$LOG_FILE
}
# --- export ---
# exfat-formatierte USB-HDD auf Linux-Server ermitteln
#
get_usb_device() {
local fstype=exfat
local lsblk="lsblk -o KNAME,TYPE,SIZE,MODEL,FSTYPE"
local device
if [ "$($lsblk 2>>$LOG_FILE | grep $fstype 2>>$LOG_FILE | wc -l 2>>$LOG_FILE)" != "1" ]; then
echo "ERROR could not query devices"
return 1
fi
device=$($lsblk 2>>$LOG_FILE | grep $fstype 2>>$LOG_FILE | sed -E 's/^(\S*).*$/\1/' 2>>$LOG_FILE)
if [ -z "$device" ]; then
echo "ERROR no exfat USB device found"
return 1
fi
echo $device
return 0
}
# USB-HDD auf Linux-Server mounten
#
# $1 - device (ohne /dev/)
#
mount_usb_device() {
local device=$1
local mount_point=/var/mnt/backup
check_directory $mount_point
if [ $? -ne 0 ]; then
echo "ERROR mount point does't exist"
return 1
fi
mount /dev/$device $mount_point >>$LOG_FILE 2>&1
if [ $? -ne 0 ]; then
echo "ERROR mounting $device"
return 1
fi
echo $mount_point
return 0
}
# USB-HDD auf Linux-Server unmounten
#
# $1 - mount point
#
umount_usb_device() {
local mount_point=$1
umount $mount_point >>$LOG_FILE 2>&1
if [ $? -ne 0 ]; then
echo "ERROR unmounting $mount_point"
return 1
fi
return 0
}
# USB-HDD suchen und Backup-Typ ermitteln
#
# Der Typ wird über eine Datei auf der USB-HDD festgelegt:
# /.backup#<typ>.tag -> z.B. /.backup#int1.tag => Typ=int1
#
# $1 - mount point
#
check_backup_device() {
log $DEBUG "$DBG check_backup_drive( $@ )"
local mount_point=$1
local tagP1=".backup#"
local tagP2=".tag"
log $DEBUG "$DBG > ls $mount_point/${tagP1}*${tagP2} | wc -l"
if [ "$(ls $mount_point/${tagP1}*${tagP2} 2>>$LOG_FILE | wc -l 2>>$LOG_FILE)" != "1" ]; then
mail_log $ERROR "$ERR no tag found on device at $mount_point"
return 1
fi
log $DEBUG "$DBG > ls $mount_point/${tagP1}*${tagP2} | sed -E \"s/.*$tagP1(.*)$tagP2/\1/\""
local tag=$(ls $mount_point/${tagP1}*${tagP2} 2>>$LOG_FILE | sed -E "s/.*$tagP1(.*)$tagP2/\1/" 2>>$LOG_FILE)
if [ $? -ne 0 ]; then
mail_log $ERROR "$ERR no tag found on device at $mount_point"
return 1
fi
echo $tag
return 0
}
# Datei-Export auf Synology-NAS ausführen
#
# TODO mount, check, unmount muss raus -> fn macht synology + linux => if host == synology...
# fn's ausser unmount liefern string|null => if -z error
#
do_export() {
log $DEBUG "$DBG do_export ()"
mail_log $INFO "$INF checking USB device"
# get device
log $DEBUG "$DBG > /usr/syno/bin/synousbdisk -enum | grep -v devices | wc -l"
if [ "$(/usr/syno/bin/synousbdisk -enum 2>>$LOG_FILE | grep -v devices 2>>$LOG_FILE | wc -l 2>>$LOG_FILE)" != "1" ]; then
mail_log $ERROR "$ERR no USB device or too many found @$HOST_NAME."
return 1
fi
log $DEBUG "$DBG > /usr/syno/bin/synousbdisk -enum | grep -v devices"
local device=$(/usr/syno/bin/synousbdisk -enum 2>>$LOG_FILE | grep -v devices 2>>$LOG_FILE)
# check if exfat
log $DEBUG "$DBG > /usr/syno/bin/synousbdisk -info $device | grep -i \"file system\" | sed -E \"s/.*:\s*(.*)\s*/\1/\""
local fs=$(/usr/syno/bin/synousbdisk -info $device 2>>$LOG_FILE | grep -i "file system" 2>>$LOG_FILE | sed -E "s/.*:\s*(.*)\s*/\1/" 2>>$LOG_FILE)
if [ "$fs" != "exfat" ]; then
mail_log $ERROR "$ERR device $device not exfat formatted"
return 1
fi
# get mount point
log $DEBUG "$DBG > /usr/syno/bin/synousbdisk -info $device | grep -i \"mount path\" | sed -E \"s/.*:\s*(.*)\s*/\1/\""
local mount_path=$(/usr/syno/bin/synousbdisk -info $device 2>>$LOG_FILE | grep -i "mount path" 2>>$LOG_FILE | sed -E "s/.*:\s*(.*)\s*/\1/" 2>>$LOG_FILE)
if [ $? -ne 0 ] || [ ! -d $mount_path ]; then
mail_log $ERROR "$ERR mount point \"$mount_path\" does not exist."
return 1
fi
local backup_type=$(check_backup_device $mount_path)
if [ -z $backup_type ]; then
return 1
fi
mail_log $INFO "$SUCCESS"
local source_path
case $backup_type in
int1|int2|1|2)
# daily + weekly backups -> Auslagerung 1+2, Backup 1+2
source_path="/volume1/nfs/backups"
;;
serien)
# Serien -> Auslagerung
source_path="/volume1/media/serien"
;;
video)
# Video -> Auslagerung
source_path="/volume1/media/video"
;;
?*)
echo "ERROR unknown backup type $backup_type"
return 1
;;
esac
mail_log $INFO ">>> "
mail_log $INFO ">>> export type : $backup_type"
mail_log $INFO ">>> export from : $source_path"
mail_log $INFO ">>> log file : $LOG_FILE"
mail_log $INFO ">>> "
mail_log $INFO "$INF exporting $source_path -> $mount_path"
log $DEBUG "$DBG rsync -rti --one-file-system --delete --stats --exclude=@eaDir $source_path $mount_path"
rsync -rti --one-file-system --delete --stats --exclude=@eaDir $source_path $mount_path >>$LOG_FILE 2>&1
is_error $?
mail_log $INFO "$INF unmounting USB device"
log $DEBUG "$DBG > /usr/syno/bin/synousbdisk -umount $device"
/usr/syno/bin/synousbdisk -umount $device >>$LOG_FILE 2>&1
is_error $?
}
# Export Backups bzw. Medien-Verzeichnisse auf USB-HDD
#
# Der Export wird nur auf der NAS ausgeführt
# (und wird ggf. dort remote gestartet)
#
export_backups() {
if [ "$HOST_NAME" != "$NAS_HOSTNAME" ]; then
run_script_remote $NAS_IP "$NAS_SCRIPT -e"
exit
fi
mail_log $INFO ">>>>>>>>>> export $VER <<<<<<<<<<"
do_export
mail_log $INFO ">>>>>>>>>> end of export"
send_mail_log "Export"
}
+4 -2
View File
@@ -3,6 +3,8 @@
# entrypoint for all actions
#
VER="2.0.0"
show_help() {
echo "usage: $0 options"
echo " -d, --daily start daily backup on local machine"
@@ -30,6 +32,7 @@ if [ "$(id -u)" -ne 0 ]; then
fi
HERE=$(dirname "$0")
THIS_SCRIPT=$0
if [ -f $HERE/main.inc.sh ]; then
. $HERE/main.inc.sh
@@ -53,7 +56,7 @@ else
exit 102
fi
log_file_name="$NAS_ROOT/log/$HOST_NAME-$(date '+%Y-%m-%d_%H%M')"
log_file_name="$(realpath $HERE/../../../log/backup/$HOST_NAME-$(date '+%Y-%m-%d_%H%M'))"
LOG_FILE="${log_file_name}.log"
file=
@@ -67,7 +70,6 @@ while :; do
;;
-d|--daily)
MAIL_LOG_FILE="${log_file_name}.auto.log"
## copy_to_nas
backup_daily
break
;;
+9 -4
View File
@@ -1,7 +1,8 @@
#!/usr/bin/env bash
NAS_ROOT=/var/srv/nas/backups
BACKUP_TARGET=/var/docker/tmp
DOCKER_ROOT=/var/docker
BACKUP_TARGET=$DOCKER_ROOT/tmp
NAS_TARGET="$NAS_ROOT/daily/$HOST_NAME/backup.$DAY"
backup_daily1() {
@@ -21,9 +22,13 @@ backup_daily3() {
before_backup() {
dump_mariadb
dump_postgresql
# TODO error handling
dump_mariadb $DOCKER_ROOT/dump/mysql
local mys=$?
dump_postgresql $DOCKER_ROOT/dump/postgresql
local pos=$?
if [ $mys -gt 0 ] || [ $pos -gt 0 ]; then
return 1
fi
stop_docker
return $?
}
+1 -1
View File
@@ -10,7 +10,7 @@ backup_daily1() {
backup_daily2() {
BACKUP_SOURCE="/volume1/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 log)
}
backup_weekly1() {
+41 -5
View File
@@ -1,8 +1,38 @@
#!/usr/bin/env bash
if [ "$(id -u)" -ne 0 ]; then
echo "**"
echo "** ERROR: script has to be run as superuser!"
echo "**"
exit 100
fi
HERE=$(dirname "$0")
. $HERE/main.inc.sh
if [ -f $HERE/main.inc.sh ]; then
. $HERE/main.inc.sh
else
echo "**"
echo "** ERROR: Datei \"$HERE/main.inc.sh\" nicht gefunden. "
echo "** Script wird abgebrochen"
echo "**"
show_help
exit 101
fi
if [ -f $HERE/$HOST_NAME.sh ]; then
. $HERE/$HOST_NAME.sh
else
echo "**"
echo "** ERROR: Datei \"$HOST_NAME.sh\" nicht gefunden (falscher Rechner?). "
echo "** Script wird abgebrochen."
echo "**"
show_help
exit 102
fi
log_file_name="$NAS_ROOT/log/$HOST_NAME-$(date '+%Y-%m-%d_%H%M')"
LOG_FILE="${log_file_name}.log"
# nicht auf calvados
#. $HERE/$HOST_NAME
@@ -13,10 +43,16 @@ test() {
isFunction() { declare -Ff "$1" ; }
#nas_test
#nathan_test
#hamiller_test
#test1
if [ "$HOST_NAME" != "$NAS_HOSTNAME" ]; then
run_script_remote $NAS_IP "/volume1/nfs/Server/bin/backup/test.sh -x"
#ssh 10.4.2.20 "sudo sh -c 'nohup /volume1/nfs/Server/bin/backup/main.sh -e &>/dev/null < /dev/null &'"
exit
else
echo "klappt $1" > /volume1/nfs/log/backup/remote_run.log
fi
exit
list1() {