Compare commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
15f77b6bf5 | ||
|
|
42af16928f | ||
|
|
39bdfbd021 | ||
|
|
0cb2748447 | ||
|
|
02f82e8147 | ||
|
|
d26f7700bd |
No files matched your search
@@ -1,3 +1,4 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
cp -v *.sh ../../bin/backup
|
||||
cp -v save-conf ../../bin
|
||||
Regular → Executable
+1
-1
@@ -1,3 +1,3 @@
|
||||
#!/usr/bin/eval bash
|
||||
|
||||
#NAS_ROOT=/Users/hb/mnt/nas/backups
|
||||
# nothing to do
|
||||
Executable
+19
@@ -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
-4
@@ -1,7 +1,5 @@
|
||||
#!/usr/bin/eval bash
|
||||
|
||||
|
||||
#NAS_ROOT=/var/srv/nas/backups
|
||||
BACKUP_TARGET=/var/docker/tmp
|
||||
NAS_TARGET="$NAS_ROOT/daily/$HOST_NAME/backup.$DAY"
|
||||
|
||||
@@ -16,12 +14,12 @@ backup_daily2() {
|
||||
|
||||
|
||||
before_backup() {
|
||||
stop_docker
|
||||
stop_containers
|
||||
return $?
|
||||
}
|
||||
|
||||
after_backup() {
|
||||
start_docker
|
||||
start_containers
|
||||
local dock=$?
|
||||
copy_to_nas "$BACKUP_TARGET" "$NAS_TARGET"
|
||||
local copy=$?
|
||||
|
||||
+44
-29
@@ -1,12 +1,14 @@
|
||||
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_ROOT="$NAS_MOUNT_POINT/backups"
|
||||
|
||||
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_KEEP_DAYS=14
|
||||
|
||||
RESTORE_PATH="$NAS_MOUNT_POINT/Server/restore"
|
||||
|
||||
@@ -16,11 +18,9 @@ NAS_HOSTNAME=synology
|
||||
NAS_IP=10.4.2.20
|
||||
NAS_SCRIPT=/volume1/nfs/Server/bin/backup/main.sh
|
||||
|
||||
WEEKLY_DAY=1 # SO->MO
|
||||
|
||||
PASSPHRASE=L1rfCXu8PHMQsGL0HJWwzQYpCT7f5VboislOTHMaEV
|
||||
EXT=tgz.gpg
|
||||
LIST_EXT=txt
|
||||
LIST_EXT=list
|
||||
|
||||
DOCKER="/usr/bin/docker compose -f /var/docker/run/docker-compose.yml --ansi never"
|
||||
SYNO_USB=/usr/syno/bin/synousbdisk
|
||||
@@ -80,11 +80,12 @@ send_mail_log() {
|
||||
|
||||
# Alte Logs löschen
|
||||
#
|
||||
# Dateien älter als $LOG_KEEP_DAYS Tage löschen
|
||||
#
|
||||
prune_logs() {
|
||||
log $DEBUG "$DBG prune_logs()"
|
||||
# Dateien älter als 14 Tage löschen
|
||||
log $DEBUG "$DBG > find \"$LOG_FILE_PATH\" -type f -mtime +14 -delete"
|
||||
find "$LOG_FILE_PATH" -type f -mtime +14 -delete >>$LOG_FILE 2>&1
|
||||
log $DEBUG "$DBG > find \"$LOG_FILE_PATH\" -type f -mtime +$LOG_KEEP_DAYS -delete"
|
||||
find "$LOG_FILE_PATH" -type f -mtime +$LOG_KEEP_DAYS -delete >>$LOG_FILE 2>&1
|
||||
if [ $? -ne 0 ]; then
|
||||
# Fehler nur protokollieren, kein Grund abzubrechen
|
||||
mail_log $ERROR "$ERR error deleting old log files."
|
||||
@@ -139,18 +140,30 @@ check_root() {
|
||||
fi
|
||||
}
|
||||
|
||||
start_docker() {
|
||||
log $DEBUG "$DBG start_docker()"
|
||||
log $DEBUG "$DBG > \$DOCKER up -d"
|
||||
$DOCKER up -d >>$LOG_FILE 2>&1
|
||||
return $?
|
||||
start_containers() {
|
||||
log $DEBUG "$DBG start_containers()"
|
||||
if [ -f /var/docker/run/docker-compose.yml ]; then
|
||||
log $DEBUG "$DBG > \$DOCKER up -d"
|
||||
$DOCKER up -d >>$LOG_FILE 2>&1
|
||||
return $?
|
||||
else
|
||||
log $DEBUG "$DBG > sudo systemctl start pihole"
|
||||
sudo systemctl start pihole >>$LOG_FILE 2>&1
|
||||
return $?
|
||||
fi
|
||||
}
|
||||
|
||||
stop_docker() {
|
||||
stop_containers() {
|
||||
log $DEBUG "$DBG stop_docker()"
|
||||
log $DEBUG "$DBG > \$DOCKER down"
|
||||
$DOCKER down >>$LOG_FILE 2>&1
|
||||
return $?
|
||||
if [ -f /var/docker/run/docker-compose.yml ]; then
|
||||
log $DEBUG "$DBG > \$DOCKER down"
|
||||
$DOCKER down >>$LOG_FILE 2>&1
|
||||
return $?
|
||||
else
|
||||
log $DEBUG "$DBG > sudo systemctl stop pihole"
|
||||
sudo systemctl stop pihole >>$LOG_FILE 2>&1
|
||||
return $?
|
||||
fi
|
||||
}
|
||||
|
||||
# Zugriffsrechte für Logs und Backups setzen
|
||||
@@ -158,10 +171,10 @@ stop_docker() {
|
||||
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
|
||||
log $DEBUG "$DBG chmod -R a+r $LLOG_FILE_PATH"
|
||||
chmod -R a+r $LLOG_FILE_PATH >>$LOG_FILE 2>&1
|
||||
log $DEBUG "$DBG > chmod -R a+r $LOG_FILE_PATH"
|
||||
chmod -R a+r $LOG_FILE_PATH >>$LOG_FILE 2>&1
|
||||
}
|
||||
|
||||
# Script per ssh auf Server $1 im Hintergrund starten
|
||||
@@ -395,7 +408,7 @@ do_auto_backup() {
|
||||
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."
|
||||
log $ERROR "$ERR keine Backup-Function $func$count() für $HOST_NAME."
|
||||
exit 1 # kein Mail-Benachrichtigung!
|
||||
fi
|
||||
set_log_info
|
||||
@@ -442,6 +455,13 @@ backup_daily() {
|
||||
prune_logs
|
||||
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 <<<<<<<<<<"
|
||||
|
||||
do_auto_backup backup_daily
|
||||
@@ -455,11 +475,6 @@ backup_daily() {
|
||||
fix_acls
|
||||
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() {
|
||||
mail_log $INFO ">>>>>>>>>> weekly auto backup $VER for $HOST_NAME <<<<<<<<<<"
|
||||
@@ -512,7 +527,7 @@ restore() {
|
||||
echo "--- files: $@"
|
||||
echo "--- to: $RESTORE_PATH"
|
||||
echo
|
||||
echo "Restore runs on NAS, see e-mail"
|
||||
echo "Restore started on NAS, see e-mail"
|
||||
echo
|
||||
run_script_remote $NAS_IP "$NAS_SCRIPT --rx $archive $@"
|
||||
}
|
||||
@@ -851,8 +866,8 @@ do_export() {
|
||||
mail_log $INFO ">>> "
|
||||
|
||||
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"
|
||||
rsync -rti --one-file-system --delete --stats --exclude=@eaDir $source_path $mount_point >>$LOG_FILE 2>&1
|
||||
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 --exclude='*'.$LIST_EXT $source_path $mount_point >>$LOG_FILE 2>&1
|
||||
is_error $?
|
||||
|
||||
mail_log $INFO "$INF unmounting USB device $device."
|
||||
|
||||
@@ -3,7 +3,10 @@
|
||||
# entrypoint for all actions
|
||||
#
|
||||
|
||||
VER="2.1.2"
|
||||
# 2.1.7 29.04.2025 - 1. Schritt zur Umstellung auf podman
|
||||
# 2.1.6 29.04.2025 - weekly backup Sa->SO
|
||||
|
||||
VER="2.1.7"
|
||||
|
||||
HERE=$(dirname "$0")
|
||||
THIS_SCRIPT=$0
|
||||
@@ -83,7 +86,9 @@ while :; do
|
||||
if [ "$2" ]; then
|
||||
list_archive_content "$2"
|
||||
else
|
||||
echo 'ERROR: "--content" requires a non-empty option argument.'
|
||||
echo 'ERROR: "--content" requires the archive name as an argument.'
|
||||
echo
|
||||
show_help
|
||||
fi
|
||||
break
|
||||
;;
|
||||
@@ -93,7 +98,9 @@ while :; do
|
||||
shift 2
|
||||
restore "$archive" "$@"
|
||||
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
|
||||
break
|
||||
;;
|
||||
|
||||
@@ -1,6 +1,5 @@
|
||||
#!/usr/bin/env bash
|
||||
|
||||
#NAS_ROOT=/var/srv/nas/backups
|
||||
DOCKER_ROOT=/var/docker
|
||||
BACKUP_TARGET=$DOCKER_ROOT/tmp
|
||||
NAS_TARGET="$NAS_ROOT/daily/$HOST_NAME/backup.$DAY"
|
||||
@@ -29,12 +28,12 @@ before_backup() {
|
||||
if [ $mys -gt 0 ] || [ $pos -gt 0 ]; then
|
||||
return 1
|
||||
fi
|
||||
stop_docker
|
||||
stop_containers
|
||||
return $?
|
||||
}
|
||||
|
||||
after_backup() {
|
||||
start_docker
|
||||
start_containers
|
||||
local dock=$?
|
||||
copy_to_nas "$BACKUP_TARGET" "$NAS_TARGET"
|
||||
local copy=$?
|
||||
|
||||
@@ -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,6 +1,5 @@
|
||||
#!/usr/bin/eval bash
|
||||
|
||||
#NAS_ROOT=/volume1/nfs/backups
|
||||
HAS_WEEKLY=true
|
||||
|
||||
backup_daily1() {
|
||||
|
||||
@@ -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
|
||||
Reference in new issue
Block a user