From 3e21cfa0fc9c58e28716b5a09eecf520567651a7 Mon Sep 17 00:00:00 2001 From: Hartmut Bauer Date: Thu, 10 Apr 2025 22:26:32 +0200 Subject: [PATCH] Export, Fixes, 1st production version --- build.sh | 2 +- cron.sh | 22 +-- hamiller.sh | 7 +- mail.sh | 2 +- main.inc.sh | 380 ++++++++++++++++++++++++++++++++++++++++++---------- main.sh | 6 +- nathan.sh | 13 +- synology.sh | 2 +- test.sh | 46 ++++++- 9 files changed, 376 insertions(+), 104 deletions(-) diff --git a/build.sh b/build.sh index 383f345..4ec67d0 100755 --- a/build.sh +++ b/build.sh @@ -1,3 +1,3 @@ #!/usr/bin/env bash -cp *.sh ../../bin/backup +cp -v *.sh ../../bin/backup diff --git a/cron.sh b/cron.sh index 5090663..812641a 100755 --- a/cron.sh +++ b/cron.sh @@ -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 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 $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 >>>>>>>>> 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#.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" +} diff --git a/main.sh b/main.sh index e0c591f..69ff241 100755 --- a/main.sh +++ b/main.sh @@ -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 ;; diff --git a/nathan.sh b/nathan.sh index e95a4f7..a24a249 100755 --- a/nathan.sh +++ b/nathan.sh @@ -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 $? } diff --git a/synology.sh b/synology.sh index 9aee729..0f78109 100755 --- a/synology.sh +++ b/synology.sh @@ -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() { diff --git a/test.sh b/test.sh index e84daf4..a277fd4 100755 --- a/test.sh +++ b/test.sh @@ -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() {