5 Commits
Author SHA1 Message Date
Hartmut Bauer 42af16928f weekly SA->SO 2025-04-29 15:28:51 +02:00
Hartmut Bauer 39bdfbd021 bugfix 2025-04-15 22:49:29 +02:00
Hartmut Bauer 0cb2748447 exclude lists from export 2025-04-15 12:15:42 +02:00
Hartmut Bauer 02f82e8147 run weekly parallel to daily 2025-04-14 16:22:30 +02:00
Hartmut Bauer d26f7700bd Small fixes 2025-04-13 19:53:54 +02:00
10 changed files with 65 additions and 132 deletions

No files matched your search

+1
View File
@@ -1,3 +1,4 @@
#!/usr/bin/env bash #!/usr/bin/env bash
cp -v *.sh ../../bin/backup cp -v *.sh ../../bin/backup
cp -v save-conf ../../bin
Regular → Executable
+1 -1
View File
@@ -1,3 +1,3 @@
#!/usr/bin/eval bash #!/usr/bin/eval bash
#NAS_ROOT=/Users/hb/mnt/nas/backups # nothing to do
Executable
+19
View File
@@ -0,0 +1,19 @@
#!/bin/bash
# falls das nochmal gebraucht wird
HERE=$(dirname $0)
DOCKER=/usr/bin/docker
ORACLEDUMP="$DOCKER exec -i oracle /opt/oracle/product/18c/dbhomeXE/bin/expdp"
ORACLECONNECT="sbsdb_master/sbsdbpwd@//localhost:1521/xepdb1"
ORACLEDATAPUMP=/var/docker/vol/oracle/dump
function dump_oracle() {
mkdir -p $HERE/oracle > /dev/null 2>&1
echo "$(date) - Oracle dump"
$ORACLEDUMP $ORACLECONNECT dumpfile=sbsdb_dump:sbsdb.dmp logfile=sbsdb_dump:sbsdb.log reuse_dumpfiles=yes
mv $ORACLEDATAPUMP/* $HERE/oracle
}
dump_oracle
-2
View File
@@ -1,7 +1,5 @@
#!/usr/bin/eval bash #!/usr/bin/eval bash
#NAS_ROOT=/var/srv/nas/backups
BACKUP_TARGET=/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"
+23 -20
View File
@@ -1,12 +1,14 @@
HOST_NAME=$(hostname -s) HOST_NAME=$(hostname -s)
DAY=$(date +%u) # MO == 1 DAY=$(date +%u) # 1-7, MO is 1
WEEKLY_DAY=7 # SA->SO
NAS_MOUNT_POINT="$(realpath $HERE/../../..)" # Server/bin/backup NAS_MOUNT_POINT="$(realpath $HERE/../../..)" # Server/bin/backup
NAS_ROOT="$NAS_MOUNT_POINT/backups" NAS_ROOT="$NAS_MOUNT_POINT/backups"
LOG_FILE_PATH="$NAS_MOUNT_POINT/Server/log/backup" LOG_FILE_PATH="$NAS_MOUNT_POINT/Server/log/backup"
log_file_name="$LOG_FILE_PATH/$HOST_NAME-$(date '+%Y-%m-%d_%H%M')" log_file_name="$LOG_FILE_PATH/$HOST_NAME-$(date '+%Y-%m-%d_%H%M%S')"
LOG_FILE="${log_file_name}.log" LOG_FILE="${log_file_name}.log"
LOG_KEEP_DAYS=14
RESTORE_PATH="$NAS_MOUNT_POINT/Server/restore" RESTORE_PATH="$NAS_MOUNT_POINT/Server/restore"
@@ -16,11 +18,9 @@ NAS_HOSTNAME=synology
NAS_IP=10.4.2.20 NAS_IP=10.4.2.20
NAS_SCRIPT=/volume1/nfs/Server/bin/backup/main.sh NAS_SCRIPT=/volume1/nfs/Server/bin/backup/main.sh
WEEKLY_DAY=1 # SO->MO
PASSPHRASE=L1rfCXu8PHMQsGL0HJWwzQYpCT7f5VboislOTHMaEV PASSPHRASE=L1rfCXu8PHMQsGL0HJWwzQYpCT7f5VboislOTHMaEV
EXT=tgz.gpg EXT=tgz.gpg
LIST_EXT=txt LIST_EXT=list
DOCKER="/usr/bin/docker compose -f /var/docker/run/docker-compose.yml --ansi never" DOCKER="/usr/bin/docker compose -f /var/docker/run/docker-compose.yml --ansi never"
SYNO_USB=/usr/syno/bin/synousbdisk SYNO_USB=/usr/syno/bin/synousbdisk
@@ -80,11 +80,12 @@ send_mail_log() {
# Alte Logs löschen # Alte Logs löschen
# #
# Dateien älter als $LOG_KEEP_DAYS Tage löschen
#
prune_logs() { prune_logs() {
log $DEBUG "$DBG prune_logs()" log $DEBUG "$DBG prune_logs()"
# Dateien älter als 14 Tage löschen log $DEBUG "$DBG > find \"$LOG_FILE_PATH\" -type f -mtime +$LOG_KEEP_DAYS -delete"
log $DEBUG "$DBG > find \"$LOG_FILE_PATH\" -type f -mtime +14 -delete" find "$LOG_FILE_PATH" -type f -mtime +$LOG_KEEP_DAYS -delete >>$LOG_FILE 2>&1
find "$LOG_FILE_PATH" -type f -mtime +14 -delete >>$LOG_FILE 2>&1
if [ $? -ne 0 ]; then if [ $? -ne 0 ]; then
# Fehler nur protokollieren, kein Grund abzubrechen # Fehler nur protokollieren, kein Grund abzubrechen
mail_log $ERROR "$ERR error deleting old log files." mail_log $ERROR "$ERR error deleting old log files."
@@ -158,10 +159,10 @@ stop_docker() {
fix_acls() { fix_acls() {
log $DEBUG "$DBG fix_acls()" log $DEBUG "$DBG fix_acls()"
log $DEBUG "$DBG chmod -R a+r $NAS_ROOT" log $DEBUG "$DBG > chmod -R a+r $NAS_ROOT"
chmod -R a+r $NAS_ROOT >>$LOG_FILE 2>&1 chmod -R a+r $NAS_ROOT >>$LOG_FILE 2>&1
log $DEBUG "$DBG chmod -R a+r $LLOG_FILE_PATH" log $DEBUG "$DBG > chmod -R a+r $LOG_FILE_PATH"
chmod -R a+r $LLOG_FILE_PATH >>$LOG_FILE 2>&1 chmod -R a+r $LOG_FILE_PATH >>$LOG_FILE 2>&1
} }
# Script per ssh auf Server $1 im Hintergrund starten # Script per ssh auf Server $1 im Hintergrund starten
@@ -395,7 +396,7 @@ do_auto_backup() {
local rc local rc
if ! $func$count 2>/dev/null ; then # Seiteneffekt: $func$count wird ausgeführt 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." log $ERROR "$ERR keine Backup-Function $func$count() für $HOST_NAME."
exit 1 # kein Mail-Benachrichtigung! exit 1 # kein Mail-Benachrichtigung!
fi fi
set_log_info set_log_info
@@ -442,6 +443,13 @@ backup_daily() {
prune_logs prune_logs
fi fi
# ggf. weekly backup parallel starten (z.ZT. nur auf NAS)
if [ $HAS_WEEKLY -a $WEEKLY_DAY -eq $DAY ]; then
log $DEBUG "$DBG starting weekly backup"
sleep 2 # wg. log name
nohup $THIS_SCRIPT -w >>$LOG_FILE 2>&1 </dev/null &
fi
mail_log $INFO ">>>>>>>>>> daily auto backup $VER for $HOST_NAME <<<<<<<<<<" mail_log $INFO ">>>>>>>>>> daily auto backup $VER for $HOST_NAME <<<<<<<<<<"
do_auto_backup backup_daily do_auto_backup backup_daily
@@ -455,11 +463,6 @@ backup_daily() {
fix_acls fix_acls
send_mail_log "Daily Backup" 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 2>&1 </dev/null &
fi
} }
backup_weekly() { backup_weekly() {
mail_log $INFO ">>>>>>>>>> weekly auto backup $VER for $HOST_NAME <<<<<<<<<<" mail_log $INFO ">>>>>>>>>> weekly auto backup $VER for $HOST_NAME <<<<<<<<<<"
@@ -512,7 +515,7 @@ restore() {
echo "--- files: $@" echo "--- files: $@"
echo "--- to: $RESTORE_PATH" echo "--- to: $RESTORE_PATH"
echo echo
echo "Restore runs on NAS, see e-mail" echo "Restore started on NAS, see e-mail"
echo echo
run_script_remote $NAS_IP "$NAS_SCRIPT --rx $archive $@" run_script_remote $NAS_IP "$NAS_SCRIPT --rx $archive $@"
} }
@@ -851,8 +854,8 @@ do_export() {
mail_log $INFO ">>> " mail_log $INFO ">>> "
mail_log $INFO "$INF exporting $source_path -> $mount_point" mail_log $INFO "$INF exporting $source_path -> $mount_point"
log $DEBUG "$DBG rsync -rti --one-file-system --delete --stats --exclude=@eaDir $source_path $mount_point" log $DEBUG "$DBG rsync -rti --one-file-system --delete --stats --exclude=@eaDir --exclude='*'.$LIST_EXT $source_path $mount_point"
rsync -rti --one-file-system --delete --stats --exclude=@eaDir $source_path $mount_point >>$LOG_FILE 2>&1 rsync -rti --one-file-system --delete --stats --exclude=@eaDir --exclude='*'.$LIST_EXT $source_path $mount_point >>$LOG_FILE 2>&1
is_error $? is_error $?
mail_log $INFO "$INF unmounting USB device $device." mail_log $INFO "$INF unmounting USB device $device."
+9 -3
View File
@@ -3,7 +3,9 @@
# entrypoint for all actions # entrypoint for all actions
# #
VER="2.1.2" # 2.1.6 29.04.2025 - weekly backup Sa->SO
VER="2.1.6"
HERE=$(dirname "$0") HERE=$(dirname "$0")
THIS_SCRIPT=$0 THIS_SCRIPT=$0
@@ -83,7 +85,9 @@ while :; do
if [ "$2" ]; then if [ "$2" ]; then
list_archive_content "$2" list_archive_content "$2"
else else
echo 'ERROR: "--content" requires a non-empty option argument.' echo 'ERROR: "--content" requires the archive name as an argument.'
echo
show_help
fi fi
break break
;; ;;
@@ -93,7 +97,9 @@ while :; do
shift 2 shift 2
restore "$archive" "$@" restore "$archive" "$@"
else else
echo 'ERROR: "--restore" requires a non-empty option argument.' echo 'ERROR: "--restore" requires at least the archive name as an argument.'
echo
show_help
fi fi
break break
;; ;;
-1
View File
@@ -1,6 +1,5 @@
#!/usr/bin/env bash #!/usr/bin/env bash
#NAS_ROOT=/var/srv/nas/backups
DOCKER_ROOT=/var/docker DOCKER_ROOT=/var/docker
BACKUP_TARGET=$DOCKER_ROOT/tmp BACKUP_TARGET=$DOCKER_ROOT/tmp
NAS_TARGET="$NAS_ROOT/daily/$HOST_NAME/backup.$DAY" NAS_TARGET="$NAS_ROOT/daily/$HOST_NAME/backup.$DAY"
Executable
+12
View File
@@ -0,0 +1,12 @@
#!/usr/bin/env bash
#
# Archive docker config
#
# copy this file to docker/run
SOURCE=/var/docker/run/docker-compose.yml
SAVE_DIR=/srv/nas/Server/CoreOS/docker-run
SAVE_FILE=$(hostname -s)-docker-compose-$(date '+%Y-%m-%d_%H%M').yml
cp $SOURCE $SAVE_DIR/$SAVE_FILE
-1
View File
@@ -1,6 +1,5 @@
#!/usr/bin/eval bash #!/usr/bin/eval bash
#NAS_ROOT=/volume1/nfs/backups
HAS_WEEKLY=true HAS_WEEKLY=true
backup_daily1() { backup_daily1() {
-104
View File
@@ -1,104 +0,0 @@
#!/usr/bin/env bash
fn() {
echo "all: $@"
echo "#1: $1"
shift
echo "rest: $@"
}
fn eins zwei drei
exit
if [ "$(id -u)" -ne 0 ]; then
echo "**"
echo "** ERROR: script has to be run as superuser!"
echo "**"
exit 100
fi
HERE=$(dirname "$0")
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
test() {
for i in "$@"; do echo "$i"; done
}
isFunction() { declare -Ff "$1" ; }
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() {
EXCL=("eaDir" "Temporary Items" "lost+found" backups)
ONE="erster #1"
TWO="zweiter #1"
#for i in "${a[@]}"; do echo "$i"; done
}
list2() {
EXCL=("@eaDir" "Temporary Items" "lost+found")
ONE="eins2"
TWO="zwei2"
return 0
#for i in "${a[@]}"; do echo "$i"; done
}
fun0() {
return 0
}
if [ "$(id -u)" -ne 0 ]; then
echo "**"
echo "** ERROR: script has to be run as superuser!"
echo "**"
exit 100
fi
fun0
rc=$?
if [ $rc -eq 0 ]; then
echo "$rc -eq 0"
fi
#echo "result=$rc0"
exit