From 32985affc04949a6951200618776f0e9afc53078 Mon Sep 17 00:00:00 2001 From: tilman Date: Tue, 17 Dec 2019 21:57:39 +0100 Subject: [PATCH] =?UTF-8?q?=E2=80=9Ebackup=5Fext.sh=E2=80=9C=20hinzuf?= =?UTF-8?q?=C3=BCgen?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- backup_ext.sh | 91 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 91 insertions(+) create mode 100644 backup_ext.sh diff --git a/backup_ext.sh b/backup_ext.sh new file mode 100644 index 0000000..40ec111 --- /dev/null +++ b/backup_ext.sh @@ -0,0 +1,91 @@ +#!/bin/bash +#Backupskript - Backup with rsync and ssh +#Version: 0.1. (2019-12-17) +# +### Konfigurationen +## Ordner müssen mit / enden. +#Verzeichnis des Skriptes finden +PFAD=$(dirname "$(readlink -e "$0")"); +HOST=`hostname`; + +#SSH (key file based login required) +SSH_TARGET="domain.local"; +SSH_USER="sshuser"; +SSH_DIR="/directory/"; + +#Ursprungsverzeichnis des Backup +SOURCE=(` cat "${PFAD}/backup_dirs.conf" `); + +#Pfad zu Datei mit auszuschließenden Dateien/Ordnern +EXCLUDE=${PFAD}"/backup_excl.conf"; + +#Pfad zu Logdatei +LOG_FILE=${PFAD}"/backup_ext_"${HOST}".log"; + +#Pfad zu Lock-Datei +LOCK_FILE=${PFAD}"/backup_ext_"${HOST}".lock"; + +###Skript beginnt, unterhalb dieser Zeile nichts ändern +NOW_START=$(/bin/date +%Y%m%d-%H%M%S); + +##Test Log/Lock-Datei +if [ -e ${LOCK_FILE} ]; then + NOW_MSG=$(/bin/date +%Y%m%d-%H%M%S); + `echo ${NOW_MSG}": Backup läuft bereits. Breche ab." >> ${LOG_FILE}`; + unset NOW_MSG; + exit; +else + touch ${LOCK_FILE}; +fi + +if [ ! -f ${LOG_FILE} ];then + touch ${LOG_FILE}; +fi + +##Funktionen +#Log und Notify-Nachricht +notify_log() { + NOW_MSG=$(/bin/date +%Y%m%d-%H%M%S); + if [ "${LOG_FINISH}" ]; then + `echo ${NOW_MSG}": "${NOTIFY_LOG_MSG} | mail -s "[VOLMAR]: Backup nach nc.hw12.org erfolgreich" tba@timaba.de`; + unset LOG_FINISH; + fi +`echo ${NOW_MSG}": "${NOTIFY_LOG_MSG} >> ${LOG_FILE}`; + unset NOTIFY_LOG_MESSAGE; + unset NOW_MSG; +} + +#Lock-Datei löschen und Skript beenden +lock_delete_end() { + rm ${LOCK_FILE}; + exit; +} + +#Prüfen ob bereits Backups existieren +SSH_LOGIN="${SSH_USER}@${SSH_TARGET}"; +if [ "${SSH_DIR}" ]; then + LASTBACKUP=`ssh ${SSH_LOGIN} ls -d ${SSH_DIR}[[:digit:]]* | /usr/bin/sort -r | /usr/bin/head -1 `; + NOTIFY_LOG_MSG="Letztes Backup [${SSH_TARGET}]: "${LASTBACKUP}; + notify_log; +fi + +# Hardlinks definieren, wenn vorheriges Backup gefunden. +if [ "${LASTBACKUP}" ]; then + INC="--link-dest="${LASTBACKUP}; +fi + +#Neuen Ordner anlegen +`ssh ${SSH_LOGIN} mkdir -p ${SSH_DIR}${NOW_START}`; + +##rsync +EXCLUDIRS="--exclude-from="${EXCLUDE}; +for SOURCE in "${SOURCE[@]}" +do +START_BACKUP="rsync ${EXCLUDIRS} ${INC} -avze ssh ${SOURCE[@]} ${SSH_LOGIN}:${SSH_DIR}${NOW_START} "; +`echo ${START_BACKUP}`; +done + +NOTIFY_LOG_MSG="Backup beendet."; +LOG_FINISH="1"; +notify_log; +lock_delete_end; \ No newline at end of file